2013-10-12 62 views
-1

這些代碼運行良好。Javascript,爲什麼要「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); 
+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)"); 
相關問題