-1

这些代码运行良好。

<input id="mainCheckbox" type="checkbox"/>
...
var controlCheckbox = document.getElementById( "mainCheckbox" ),
...
controlCheckbox["onclick"] = new Function( "controlCheckbox.Notify(controlCheckbox.checked)" );

为什么这行不通?

controlCheckbox["onclick"] = controlCheckbox.Notify(controlCheckbox.checked);
4

1 回答 1

5

这不起作用,因为它没有分配函数,而是.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)" );
于 2013-10-12T00:38:16.900 回答