一道关于JS作用域的面试题
Posted xfcao
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一道关于JS作用域的面试题相关的知识,希望对你有一定的参考价值。
1 var x = 1; 2 var obj = { 3 x: 2, 4 dbl: function () { 5 this.x *= 2; 6 x *= 2; 7 console.log(‘===============‘) 8 console.log(x); 9 console.log(this.x); 10 } 11 };
// 说出下面的输出结果
obj.dbl();
//解析:this.x指向当前对象,所以this.x *= 2等同于obj.x *= 2
//而x *= 2,在当前作用域中没有找到声明,则在全局作用域下查找是否有x, x *= 2等同于window.x *= 2
//日志打印输出2 4,此时window.x为2, obj.x为4
var func = obj.dbl;
func();
//func()没有前缀,所以func()相当于window.func(),此时func()中的x与this.x均指向window.x
//日志打印输出8 8,此时window.x为8, obj.x为4
var funcBind = obj.dbl.bind(obj);
funcBind();
//func()没有前缀,但是因为通过bind()方法,把funcBind()的作用域与obj的作用域绑定起来,所以func()相当于obj.dbl(),其中x作用域与上面??一样查找x,只不过此时window.x为8, obj.x为4
//日志打印输出16 8
以上是关于一道关于JS作用域的面试题的主要内容,如果未能解决你的问题,请参考以下文章