作用域是什么?
作用域就是变量与函数的可访问范围
作用域链又是什么呢?
讲作用域链之前,我们首先要讲一下变量是怎么查找的。
var name = 'window.name'; function foo(){ var name = 'foo.name'; console.log(name); } function bar(){ console.log(name); } foo(); // foo.name bar(); // window.name复制代码
变量查找的时候,会先从当前执行上下文中查找该变量,如果未找到,就会去父级执行上下文中查找,直到全局执行上下文(如果对于执行上下文不理解,可以看我之前的一篇文章《执行上下文和执行栈》),而变量这种查找的规则就形成了作用域链。
但是需要注意的是,我之前的文章讲过
执行上下文的创建阶段:确定this及作用域链,声明函数并初始化,声明变量并赋予默认值undefined,创建arguments对象
接下来看一个例子:
let name = 'window.name'; function foo(){ console.log(name); } function bar(){ let name = 'bar.name'; foo(); } bar(); // window.name 复制代码
所以写代码的时候不要被自己绕晕了
如果有错误或者不严谨的地方,请给予指正,十分感谢!