关于IIFE能保持变量私有和污染全局变量的问题

在学习JS的IIFE的时候,看到很多教程都说IIFE可以保持变量的私有。例如
(functionfoo(){
varb=7;
})();
console.log(b);//referenceError
在函数外无法访问变量b。但是这里用正常的函数声明,不是也能达到同样的效果吗?
另外还看到有教程都说IIFE可以防止polluteglobalvariables。比如
varb=5;
(functionfoo(){
varb=7;
})();
console.log(b);//5
但是正常的函数声明,不是也能达到同样的效果吗?
我不理解IIFE在这两个方面有比正常的函数声明有什么优势
开满天机
浏览 484回答 2
2回答

万千封印

在楼主的代码里,IIFE避免污染了全局变量foo。而直接声明会创建一个foo的全局变量。关于私有变量的问题,其他回答已经非常精彩,就不再赘述了。

牧羊人nacy

在学习JS的IIFE的时候,看到很多教程都说IIFE可以保持变量的私有。这里要对比的是vara=1;//和(functionfoo(){vara=1;})();而不是对比立即执行函数表达式和函数声明或者函数表达式的执行的区别,他并不是一个高阶函数,函数作用域都是一样的,他只是立即执行而已。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript