码迷,mamicode.com
首页 > Web开发 > 详细

一道关于JS作用域的面试题

时间:2020-02-21 00:06:47      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:面试题   bind   没有   style   OLE   查找   作用   obj   面试   

 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作用域的面试题

标签:面试题   bind   没有   style   OLE   查找   作用   obj   面试   

原文地址:https://www.cnblogs.com/xfcao/p/12339662.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!