簡體   English   中英

JavaScript匿名函數表達式與IIFE

[英]JavaScript anonymous function expression vs IIFE

遇到一些在表達式中使用IIFE而不僅僅是普通函數的代碼。

var custom_type = (function() {
    return $('#myDiv').attr('custom_type');
})();

通常我會寫這樣的東西:

var custom_type = function() {
    return $('#myDiv').attr('custom_type');
};

IIFE的原因是什么? 我唯一能想到的是,IIFE可能只在開始時分配一次custom_type變量,而第二次可能會在每次引用變量時繼續檢查更新的類型。

在這個例子中,你可以完全省去這個功能,只需:

var custom_type = $('#myDiv').attr('custom_type');

但是一般來說,你可以使用IIFE為變量賦值的更為復雜的“剛剛在時間”計算-我想,如果我需要遍歷東西使用它們,所以我可以有i ,不污染電流范圍。

但是,在第二個示例中,結果完全不同 - 您需要調用函數custom_type()來獲取當前值,而第一段代碼將獲取其值一次,變量將保存該值。

IIFE實際上將運行(立即調用的函數表達式),因此變量將被設置為其響應。

這是一個JSFiddle來演示這個,看看你的JS控制台的輸出: http//jsfiddle.net/Y4JmT/1/

代碼在這里:

var custom_type = (function() {
    return 'foo';
})();

var custom_type2 = function() {
    return 'bar';
};

console.log('iife = ' + custom_type);
console.log('non-iife = ' + custom_type2);

在你的JS控制台中,你會看到類似於:

iife = foo 

non-iife = function () {
    return 'bar';
} 

你的第一個(IIFE)執行函數並存儲其結果,秒存儲函數作為定義。

(function(x) {
    return x * 2;
})(5);

你正在調用普通的函數funciton:func(arg1,arg2),但是你傳遞整個函數定義而不是函數名,所以上面會返回10,如:

function multiply(x) {
    return x * 2;
}

multiply(5);

他們的意思是一樣的,你正在打電話。 不太可能第一個,第二個是定義加一個電話。

IIFE允許您在創建時調用函數(匿名或其他)。 你看過這個嗎? http://benalman.com/news/2010/11/immediately-invoked-function-expression/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM