JavaScript 立即執行函數和閉包


閉包

function A(){
        function B(){
            console.log("hello world");
        }
        return B;
}
var c = A();
c();//hello world

這就是一個最簡單的閉包

翻譯為自然語言如下

  • 定義普通函數A
  • 在A中定義普通函數B
  • 在A中返回B
  • 執行A,並把A執行結果賦值給變量C
  • 執行C

當一個內部函數被其外部函數之外的變量引用時,就形成了一個閉包。

立即執行函數

此類函數沒有聲明,再一次執行過后即釋放。適合做初始化工作

//立即執行函數 也會有預編譯的過程
var num = (function(a,b,c){
        var d= a+b+c*2-2;
        return d;

}(1,2,3))

立即執行函數的兩種寫法

  • (function(){}()); W3C 建議第一種
  • (function(){})();

關鍵點補充:

  • 只有表達式才能被執行符號執行
//此為函數聲明,不可以被執行符號執行
function
test(){ var a = 123; }();
  • 能被執行符號執行會忽略函數的名稱
//&& || + - ! 會讓函數聲明變成表達式,加上執行符號 即立即執行函數,然后忽略函數名稱
!function test(){

}()
所以立即執行函數可寫成
(function(){}());

例題

function test(a,b,c,d){
     console.log(a+b+c+d);
    }(1,2,3,4);

正常不能執行,系統識別成了

function test(a,b,c,d){
     console.log(a+b+c+d);
    }
    
    
    (1,2,3,4);

這樣就不會報錯,但並不是立即執行函數


免責聲明!

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



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