1. 程式人生 > >JavaScript 函數調用時帶括號和不帶括號的區別

JavaScript 函數調用時帶括號和不帶括號的區別

span script nod 才會 彈出 產生 都是 必須 得到

function countBodyChildren(){
    var body_element = document.getElementsByTagName("body")[0];
    alert(body_element.childNodes.length);
}

window.onload = countBodyChildren;
//window.onload = countBodyChildren();

代碼功能:在彈出框顯示body元素的子元素。

不帶括號為9;

帶括號為8,在加載完成後為9;

那麽到底在使用一個函數時需不需要加上()呢?

  函數只要是要調用它進行執行的,都必須加括號。此時,函數實際上等於函數的返回值或者執行效果,當然,有些沒有返回值,但已經執行了函數體內的行為,就是說,加括號的,就代表將會執行函數體代碼。

  不加括號的,都是把函數名稱作為函數的指針,一個函數的名稱就是這個函數的指針,此時不是得到函數的結果,因為不會運行函數體代碼。它只是傳遞了函數體所在的地址位置,在需要的時候好找到函數體去執行。

  例如window.onload=countBodyChildren;

  countBodyChildren函數並不會在這行代碼時就執行,瀏覽器加載文檔時這句話會被加載,會被告知文檔加載完要執行哪個函數,但實際上沒有當時就執行,等到整個文檔加載完成之後才會通過init這個指針去執行init()。

所以一般時候我們都是采用的是無括號的原因。這也是由於括號的二義性,因為括號是“函數調用運算符”,相當於在執行這樣一個函數,所以產生的問題在理解了之後也就理解了。

JavaScript 函數調用時帶括號和不帶括號的區別