javascript 函數后面有多個小括號f( )( )( )...


 
        

有時我們看見js函數后面跟着多個小括號是什么意思?f( )( )( )...

f()執行f函數,返回子函數

f()()執行子函數,返回孫函數

f()()()執行孫函數,返回重孫函數

... ...

但注意,如果想這樣執行,函數結構必須是這樣,f的函數體里要return 子函數,子函數里要return 孫函數,如果沒有return關鍵字,是不能這樣連續執行的,會報錯的。

舉個例子:k是f的子函數,return子函數k,所以f()()能連續執行。

    var i=1;
    function f(){
        i++;
        console.log("打印 :  "+i)
        return k;
        function k() {
            return "I love you!"
        }
    }
    f();
    console.log("111111111111")
    f()()
    alert(f()());

結果如圖:  

 

 

JavaScript 函數調用時帶括號和不帶括號的區別!!!
例子說明: 
例1.
function init(){
    。。。。。。
}
window.onload = init;
 
 
例2:
function fun(){
    return 5
}
var a=fun
var b=fun()
a是fun函數,b是5
 
 
那么到底在使用一個函數時需不需要加上()呢?
函數只要是要調用它進行執行的,都必須加括號。此時,函數實際上等於函數的返回值或者執行效果,當然,有些沒有返回值,但已經執行了函數體內的行為,就是說,加括號的,就代表將會執行函數體代碼。
不加括號的,都是把函數名稱作為函數的指針,一個函數的名稱就是這個函數的指針,此時不是得到函數的結果,因為不會運行函數體代碼。它只是傳遞了函數體所在的地址位置,在需要的時候好找到函數體去執行。
 
例如window.onload=init;
init函數並不會在這行代碼時就執行,瀏覽器加載文檔時這句話會被加載,會被告知文檔加載完要執行哪個函數,但實際上沒有當時就執行,等到整個文檔加載完成之后才會通過init這個指針去執行init()。
 
 
所以一般時候我們都是采用的是無括號的原因。這也是由於括號的二義性,因為括號是“函數調用運算符”,相當於在執行這樣一個函數,所以產生的問題在理解了之后也就理解了。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM