[英]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.