我在看《你不知道的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函数作用域,也就是属于函数自身的作用域?
希望走过路过的大神指点一二!不胜感激!:)
jeck猫
相关分类