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

为什么立即执行函数不能在其所在的作用域访问它?

为什么立即执行函数不能在其所在的作用域访问它?

噜噜哒 2019-03-13 17:19:55
我在看《你不知道的JavaScrpit》中遇到类似这样一个例子:(function foo(){    console.log('函数内部:'+foo);//打印出这个函数体})();console.log('函数外部:'+foo);//报错。Uncaught ReferenceError: foo is not defined书上的解释是:foo 被绑定在函数表达式自身的函数中而不是所在作用域中。换句话说,(function foo(){……})作为函数表达式意味着foo只能在..所代表的位置被访问,外部作用域则不行。我疑问的是:1、为什么foo被绑定在函数表达式自身的函数中?是语法上本来就是这样规定的还是有其他的解释?如果有其他的解释,那是什么原理呢?2、foo属于哪个作用域?从位置上看,foo是属于全局作用域的,但是通过代码可以看出在全局作用域中无法访问。那么,foo是不是就不属于全局作用域?而是属于foo函数作用域,也就是属于函数自身的作用域?希望走过路过的大神指点一二!不胜感激!:)
查看完整描述

2 回答

?
jeck猫

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

(function foo(){console.log('函数内部:'+foo);//打印出这个函数体})(); //后面还有对括号

(function foo(){...})();这个是立即执行函数吧,他会隔绝作用域的


查看完整回答
反对 回复 2019-03-27
  • 2 回答
  • 0 关注
  • 918 浏览
慕课专栏
更多

添加回答

举报

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