有時我們看見js函數后面跟着多個小括號是怎么回事?f( )( )( )...
f()意思是執行f函數,返回子函數
f()()執行子函數,返回孫函數
f()()()執行孫函數
()()表示定義並執行,使用時不用再單獨調用執行了
但注意,如果想這樣執行,函數結構必須是這樣,f的函數體里要return 子函數,子函數里要return 孫函數,如果沒有return關鍵字,是不能這樣連續執行的,會報錯的。
舉個例子:k是f的子函數,return子函數k,所以f()()能連續執行。
<script> var i=1; function f(){ i++; console.log("------------- : "+i) return k; function k() { return "I love you!" } } f(); console.log("111111111111"); f()(); alert(f()()); </scirpt>
結果如圖:
()()表示定義並執行,使用時不用再單獨調用執行了,當只有一個括號時:(function(){}),只是定義了一個函數不會執行,再加一個括號才會自己執行。
如下面:(function(){...} )(); 此函數是個無名函數可自動執行,f()() 是執行子函數返回孫函數 ,即執行第一個函數(括號)中的 function f(), 而第一個函數中又聲明了 function k() 及執行了k()
<script> var i=1; (function f(){ i++; console.log("------------- : "+i) // return k; function k() { console.log("------- : "+i); return "I love you!" } k(); })(); </script> ----------或者--------- <script> var i=1; (function f(){ i++; console.log("------------- : "+i) // return k; var two= function(){ console.log("------- : "+i); return "I love you!" } two(); })(); </script>
---------不執行的反例--------
只有一個括號(function(){};)
<script>
var i=1;
(function f(){ i++; console.log("------------- : "+i) // return k; function k() { console.log("------- : "+i); return "I love you!" } k(); }); </script>