虽然这段代码很好:
function() { };
此代码不是:
x
顶部示例创建一个匿名函数并将其分配给var x = eval('function() { }');
。底部示例是语句,其中需要函数名称,因此它是语法错误。
现在,定义一个匿名函数并没有将其分配到任何地方似乎毫无意义,但这是一个面对行为的例子:
function() { }
哪个应该像第一个示例一样,但是语法错误。
在我正在开发的应用程序的深处,我们来讨论这个问题。我希望WebView
成为一个表达。
简短说明为什么这是一个将javascript调用到evaluateJavascript
的原生OSX应用程序。我们有一个evaluateJavascript
函数,本机层可以使用它来调用任意javascript。 try/catch
用myCallback = evaluateJavascript("function() { }")
包装给定代码以进行错误处理,因为这是获取详细错误信息的唯一方法。因此,如果您致电try {
return eval('function() { }');
} catch(e) {
// ....
}
,我们会生成一个包含以下正文的函数:
Info.plist
并返回结果。
答案 0 :(得分:2)
eval
。查找错误的另一个选项是,如果您在window
(或等效)对象上侦听错误,并将脚本导入为<script>
,则会立即添加和删除。function
之前在同一行上执行任何操作会导致function
成为表达式以下所有内容均有效(尽管无用)
0, function () {};
(function() {});
+function () {};
-function () {};
!function () {};
// etc
这样的函数表达式通常是为 IIFEs 完成的,即
(function (foo) {
console.log(foo);
}('bar'));
// "bar" logged
但您可以将样式应用于eval
。括号或逗号运算符应该适合你
var code = 'function () {}';
var foo = eval('0, ' + code);
foo; // function () {}
答案 1 :(得分:1)
你不能
class Type < ActiveRecord::Base
belongs_to :supertype, class_name: "Type"
has_many :subtypes, class_name: "Type", foreign_key: 'supertype_id'
end
答案 2 :(得分:1)
尝试/接近 - 1:下面应该有效
var scope = {};
eval('scope.x = function() { return "Hello World"; }');
console.log(scope.x());
<强>输出强>
Hello World
[Finished in 0.3s]
** 方法 - 2 **
在阅读上述问题评论中IIFE的链接后,我尝试了以下内容 - 它似乎也有效。
var x = eval('(function() { return "Hello World"; })');
console.log(x());
但是,我意识到,对于IIFE,我们需要使用(function(){})()
之类的代码 - 请注意尾随()
。但是,在Approach-2代码中 - 我没有尾随()
。然后,我查了eval
documentation,然后我开始了解以下内容(这解释了为什么方法2有效):
作为字符串定义函数的eval需要“(”和“)”作为前缀和 后缀
答案 3 :(得分:1)
你说var x = eval('function() { }');
应该像第一个例子一样。你为什么这么认为?您的eval
参数
function() { }
是一个声明,如上所述,无效。你可以把它变成这样的表达式:
var x = eval('(function() { })');