IIFE (Immediately Invoked Function Expression) 是在宣告完函式後马上执行的一种函式。
这里尝试把一般的函式呼叫,改写成匿名函式:
// original
function greeting() { console.log("Hi"); }
greeting();
// IIFE
(function () { console.log("Hi"); })();
这种形式包含
()
包起来的匿名函式(anonymous function)。()
後用expression ()
执行函式。即使不是宣告匿名函式,也可以正常运行,只是没什麽意义:
(function greeting() { console.log("Hi"); })();
// output: "Hi"
IIFE 的用途,通常是 避免变数污染到global scope:
(function () {
var name = "apple";
return name;
})();
console.log(name);
// output: "" ( in browser )
→ 因为在函式内宣告的变数只有function scope,因此不会影响到全域变数。
如果把 IIFE 指派给变数,会储存回传值,不会储存 function 本身:
let hi = (function () {
let hi = "Hi!!";
return hi;
})();
console.log(hi);
// output: Hi!!
Ans. 不是, function foo(){ }() → (
function foo(){ })
(); 在function外加上(小括号),foo可以删除。
var foo = "Hello";
(function() {
var bar = " World";
alert(foo + bar);
})();
alert(foo + bar);
Ans. "Hello World" ; (错误讯息)ReferenceError: bar is not defined
var a = 1
(function(){console.log(a);})()
Ans. 出现错误, 程序码没有断句,1会被当成function呼叫。
可以看成这样:
var a = 1(function(){console.log(a);})()
// TypeError: 1 is not a function
4.请问以下立即函式会出现什麽讯息?
(题目来自 六角学院 的 观念测验:JavaScript 热门面试题。)
(function(){
console.log('六角学院 A');
}());
(function(){
console.log('六角学院 B');
});
Ans. 六角学院 A / (){ console.log('六角学院 B'); }
第一个答案会执行,是因为符合 JSLint 的版本。
第二个答案则是只包裹了function但没有执行,所以回传了整个function。
【如内文有误还请不吝告知>< 谢谢阅览至此的各位:D】
参考资料:
-----正文结束-----
非同步请求是我的罩门,所以前几天的文章都看资料看得很痛苦。
今天写IIFE整个加速而且快乐很多。
BTW 昨天的文章有补充fetch API的部分,有兴趣可以回去看看。
什麽是网站推播通知 推播通知不管对 App 或是网站来说都是一种重新吸引用户来使用 App 的方法,...
在昨天的文章有提到物件可以使用 . 来新增属性,以下使用各种型别来新增属性 物件 物件新增属性 co...
前言:先来谈谈线串列表示甚麽,线性串列就是一种a[0],a[1],a[2]…,a[n]所组成的有限序...
目标 使用 Pro Components 制作图表 萤幕截图 汇出png图 Vaadin Chart...
ViewPager ViewPager是个让使用者能左右切换view的功能,而ViewPager是直...