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

我在看《你不知道的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函数作用域,也就是属于函数自身的作用域?

希望走过路过的大神指点一二!不胜感激!:)


噜噜哒
浏览 919回答 2
2回答

jeck猫

(function foo(){console.log('函数内部:'+foo);//打印出这个函数体})(); //后面还有对括号(function foo(){...})();这个是立即执行函数吧,他会隔绝作用域的
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript