Анонимное выражение функции JavaScript против IIFE
столкнулся с некоторым кодом, который использует IIFEs в выражении, а не только обычную функцию.
var custom_type = (function() {
return $('#myDiv').attr('custom_type');
})();
обычно я бы написал это как-то вроде:
var custom_type = function() {
return $('#myDiv').attr('custom_type');
};
в чем причина жизни? Единственное, что я могу придумать, это то, что IIFE может назначить custom_type
переменная только один раз в начале, тогда как второй может продолжать проверять обновленный тип каждый раз, когда на переменную ссылаются.
4 ответов
в этом примере вы можете полностью отказаться от функции и просто сделать:
var custom_type = $('#myDiv').attr('custom_type');
однако в целом вы можете использовать IIFE для более сложного" точно в срок " вычисления переменных назначений - мне нравится использовать их, если мне нужно перебирать что-то, поэтому я могу иметь i
без загрязнения текущей области.
во втором примере, однако, результат совершенно другой - вам нужно будет вызов функции custom_type()
получить настоящее value, тогда как первая часть кода получит свое значение один раз, и переменная будет содержать это значение.
первый из ваших (IIFE) выполняет функцию и сохраняет ее результат, секунд сохраняет функцию как определение.
(function(x) {
return x * 2;
})(5);
вы делаете вызов как обычный funciton: func (arg1, arg2), но вместо имени функции вы передаете определение всей функции, поэтому выше будет возвращено 10 как:
function multiply(x) {
return x * 2;
}
multiply(5);
они означают то же самое, вы делаете звонки. Маловероятно, что первый, второй-это определение плюс вызов.
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';
}
IIFEs позволяют вызывать функцию (анонимную или иную) в момент создания. Ты смотрела на это? http://benalman.com/news/2010/11/immediately-invoked-function-expression/