gpt4 book ai didi

javascript - 使用 "eval"创建匿名方法 - 浏览器特定行为

转载 作者:数据小太阳 更新时间:2023-10-29 06:03:50 24 4
gpt4 key购买 nike

我使用 jQuery,我需要使用 eval() 函数生成一个匿名方法。

以下行适用于 Opera 但不适用于 IE、FF、Chrome:

var callbackStr = "function(){alert('asdf');}";  
var callback = eval(callbackStr);
callback();

此代码适用于所有浏览器:

var callbackStr = "var callback = function(){alert('asdf');}";  
eval(callbackStr);
callback();

你看,我已经解决了我的问题。但我想知道,到底发生了什么。任何人都可以向我解释这种行为,或者告诉我在哪里可以找到更多信息吗?

(PS:我知道this page。)

最佳答案

原因与在使用 eval 之前需要将 JSON 字符串括起来的原因相同 - eval 将 { 视为标记,语句开始 eval 假设匿名函数是一个FunctionDeclaration。使用括号允许 eval 将里面的内容视为表达式:

var callbackStr = "(function(){alert('asdf');})";  
var callback = eval(callbackStr);
callback();
// -> alerts 'asdf';

至于为什么 Opera 在这里表现不同,我不知道。至于您对 eval 的使用,可能有更好的方法(几乎总是有)。

我从规范中为您找出了引述,ECMA-262 3rd Edition 的第 12.4 节| :

Note that an ExpressionStatement cannot start with an opening curly brace because that might make it ambiguous with a Block. Also, an ExpressionStatement cannot start with the function keyword because that might make it ambiguous with a FunctionDeclaration.

强调我的。

关于javascript - 使用 "eval"创建匿名方法 - 浏览器特定行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3245622/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com