在学习JS的IIFE的时候,看到很多教程都说IIFE可以保持变量的私有。例如
(function foo() {
var b = 7;
})();
console.log(b); // referenceError
在函数外无法访问变量b。但是这里用正常的函数声明,不是也能达到同样的效果吗?
另外还看到有教程都说IIFE可以防止pollute global variables。比如
var b = 5;
(function foo() {
var b = 7;
})();
console.log(b); // 5
但是正常的函数声明,不是也能达到同样的效果吗?
我不理解IIFE在这两个方面有比正常的函数声明有什么优势
这里要对比的是
而不是对比
立即执行函数表达式
和函数声明
或者函数表达式
的执行
的区别,他并不是一个高阶
函数,函数作用域都是一样的,他只是立即执行
而已。