Javascript,为什么还要“new Function()”
Javascript, why have to "new Function()"?
这些代码运行良好。
<input id="mainCheckbox" type="checkbox"/>
...
var controlCheckbox = document.getElementById( "mainCheckbox" ),
...
controlCheckbox["onclick"] = new Function( "controlCheckbox.Notify(controlCheckbox.checked)" );
为什么这行不通?
controlCheckbox["onclick"] = controlCheckbox.Notify(controlCheckbox.checked);
这不起作用,因为它不分配函数,而是立即调用.Notify
。
但是,您可以使用匿名函数语法来创建函数。
controlCheckbox["onclick"] = function() {
controlCheckbox.Notify(controlCheckbox.checked);
};
这是比使用 Function
构造函数更常见的方法。
这两种方法之间的一个区别是,从new Function
创建的函数将无法使用封闭的局部变量作用域。就好像它是直接在global
范围内创建的。
;(function() {
var foo = "bar"; // local variable
var x = new Function("console.log(foo);");
x(); // ReferenceError: foo is not defined
})();
因此,除非第一个代码示例中的变量在global
范围内,否则它将不起作用,因为controlCheckbox
变量将无法访问。
虽然,因为变量只是对被绑定元素的引用,所以你并不真正需要它,因为你可以在处理程序中使用this
。
controlCheckbox["onclick"] = new Function("this.Notify(this.checked)" );
相关文章:
- typeof new Function()总是“;函数”;
- (new Array(10)).map(function() { return 1;}) 返回 [, , , , , .
- JSLint errors on 'new function(){..}'但为什么呢?如果我想要匿名关闭
- Javascript,为什么还要“new Function()”
- jshint 和 Function() gets:调用构造函数时缺少“new”前缀
- 使用“new Function(..) ”的安全注意事项“(在渲染期间,表达式来自我的 Javascript 源代码)
- Javascript: new Function() and eval()
- 如何在不使用eval/new function(CSP)的情况下从字符串中获取函数
- 向使用javascript中的new function关键字创建的函数传递参数
- 使用“new Function()”进行Javascript优化
- 什么是new function(settings){..}(jQuery.查询|| {});javascript中的Me
- 评估JSON字符串-eval()与new Function()
- new Function()()是什么意思?
- new function(){} vs new Function();
- 使用“new Function”和性能问题
- Knockoutjs为什么使用“with”?语句和“new function”;实现它的bindingProvider
- 使用new Function()和string创建SAPUI5控件
- 使用function和“new”的设计意图是什么?关键字在Javascript中创建对象
- function(){}与new function(){}的区别
- 是所有的函数声明&在幕后调用new Function()创建的表达式