一道關於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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM