Javascript,为什么还要“new Function()”

Javascript, why have to "new Function()"?

本文关键字:Function new 为什么 Javascript      更新时间:2023-09-26

这些代码运行良好。

<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)" );