关于JS中的作用域链及其面试题

作用域链


作用域链的理解

关于JS中的作用域链及其面试题
图示如下:
关于JS中的作用域链及其面试题
执行结果如下:
关于JS中的作用域链及其面试题
注意区分查找变量和查找属性时,不存在时的反馈结果:
①查找变量若找不到,会报错;
②查找对象属性如果找不到,会返回undefiend;


JS中的作用域链面试题举例

关于JS中的作用域链及其面试题
结果为:10。

大家是不是对此感到疑惑?疑惑就对了,因为这里有一个坑,我们来看看作用域的视图:

关于JS中的作用域链及其面试题
分析:虽然进入了show()函数,但是后面执行 f()是重新跳转到全局中的 fn()函数中重新执行,因此这时对于变量 x 的查找是在全局之中查找了。


关于JS中的作用域链及其面试题
执行结果如下:
关于JS中的作用域链及其面试题
分析:上面的fn可以找到,但是下面的fn2找不到。
因为进入fn2()函数后,他先会在函数fn2内部找是否有fn2这个东西,没找到再去全局作用域找,但是依旧没有,就直接报错(即因为没有this,他会跳过查找对象内的属性或方法)

Debug方法:按照如下书写, 加一个this的指定。

关于JS中的作用域链及其面试题