Chr*_*igl 5 javascript eval callback
我使用jQuery,我需要使用eval()函数生成一个匿名方法.
以下几行适用于Opera,但不适用于IE,FF,Chrome:
var callbackStr = "function(){alert('asdf');}";
var callback = eval(callbackStr);
callback();
Run Code Online (Sandbox Code Playgroud)
此代码适用于所有浏览器:
var callbackStr = "var callback = function(){alert('asdf');}";
eval(callbackStr);
callback();
Run Code Online (Sandbox Code Playgroud)
你看,我已经解决了我的问题.但我想知道,到底发生了什么.任何人都可以向我解释这种行为,或告诉我在哪里可以找到更多信息?
(PS:我知道这个页面.)
原因与在使用eval它们之前需要在JSON字符串周围括起括号的原因相同- eval视为 eval假定匿名函数是一个FunctionDeclaration.使用括号允许eval将内部处理为表达式:{一个标记,语句的开始
var callbackStr = "(function(){alert('asdf');})";
var callback = eval(callbackStr);
callback();
// -> alerts 'asdf';
Run Code Online (Sandbox Code Playgroud)
至于为什么Opera在这里行为不同,我不知道.至于你的使用eval,可能有更好的方法(几乎总是如此).
我在ECMA-262第3版的第12.4节中为你挖出了一个引用的引用:
请注意,ExpressionStatement不能以开括号大括号开头,因为这可能使其与Block不一致.此外,ExpressionStatement不能以function关键字开头,因为这可能使其与FunctionDeclaration不一致.
强调我的.
| 归档时间: |
|
| 查看次数: |
2569 次 |
| 最近记录: |