一、题目:输出什么
var a = 10;
(function () {
var a = {
a: 0
}
var b = function () {
setTimeout(() => {
console.log(this.a);
})
}
b();
b.call(a);
a.a = 1;
a = {
a: 2
};
})()
答案和解析在下方
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
二、答案:

三、解析:
var a = 10;
(function () {
var a = {a: 0}
var b = function () {
setTimeout(() => {
console.log(this.a); //第四步:打印地址1所指向的内存1中的a
})
}
b();/*第一步:匿名函数是一个没有指针的全局变量,
所以匿名函数中this指向window,
所以打印的是最外层的a=10;*/
b.call(a); //第二步:把目前obj所指向的内存1的地址1传进去了
a.a = 1; //第三步:地址1指向的内存1中的属性a赋值为1
a = {a: 2 }; //第五步:在内存2中生成一个对象,将属性a赋值为2
//将指向内存2的地址2赋值给obj
})()

本文深入探讨了JavaScript中this关键字的指向问题,通过具体代码示例解释了不同上下文中this的指向变化,包括全局作用域、对象方法调用及setTimeout函数内部的this指向。
889

被折叠的 条评论
为什么被折叠?



