2013-12-22 39 views
1

我最熟悉Python,並稍微與C,當我在JS看到這句法它真的讓我困惑window.onload = stuff和window.onload = stuff()之間有區別嗎?

function begin() { 
    console.log("done did it"); 
} 

window.onload = begin(); // the same output as 
window.onload = begin; // this one 

在Python中,一個將傳遞函數的返回值,另一個是指向該函數的指針。 JS中這兩個語句的語義是什麼?

回答

10

是的,有很大的差異。

window.onload = stuff();呼叫stuff功能和它的返回值分配給onload財產。

window.onload = stuff;stuff函數分配給屬性onload。當load事件發生時,瀏覽器將調用該函數。函數是對象。當你通過名稱來引用它們而沒有時,它們稱之爲對象。這與您正在討論的「函數指針」類似。

+0

所以你說,該行爲是一樣的使用Python? –

+1

@MorganWilde:我不太瞭解Python,但是從你所描述的內容來看,我相信如此。 –

0

正確的做法是:

window.onload = xxxx; 

的XXX必須是一個函數。

第一個:

var fn = function() { 
    alert("abc"); 
} 

window.onload = fn; 

另一個:

var fn = function() { 
    var abc = "abc"; 
    return function() { 
     alert(abc); 
    } 
} 
window.onload = fn(); 
+0

是的,你是對的! – Andy12530