为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

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

2 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

在楼主的代码里,IIFE避免污染了全局变量foo。而直接声明会创建一个foo的全局变量。
关于私有变量的问题,其他回答已经非常精彩,就不再赘述了。
                            
查看完整回答
反对 回复 2019-05-20
?
牧羊人nacy

TA贡献1862条经验 获得超7个赞

在学习JS的IIFE的时候,看到很多教程都说IIFE可以保持变量的私有。
这里要对比的是
vara=1;
//和
(functionfoo(){
vara=1;
})();
而不是对比立即执行函数表达式和函数声明或者函数表达式的执行的区别,他并不是一个高阶函数,函数作用域都是一样的,他只是立即执行而已。
                            
查看完整回答
反对 回复 2019-05-20
  • 2 回答
  • 0 关注
  • 483 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信