window.val = 1;
var obj={
val: 2,
dbl: function () {
this.val *= 2;
val *= 2;
console. log('val:', val) ;
console. log( 'this.val:', this.val) ;
}
};
//说出下面的输出结果
obj.dbl();
var func = obj.dbl;
func();
这个问题我知道放在console中运行去答案,想要的分析this指向问题。
window.val = 1;
var obj={
val: 2,
dbl: function () {
this.val *= 2;
val *= 2;
console. log('val:', val) ;
console. log( 'this.val:', this.val) ;
}
};
//说出下面的输出结果
obj.dbl();
var func = obj.dbl;
func();
这个问题我知道放在console中运行去答案,想要的分析this指向问题。
考虑了很久,执行obj.dbl()时,this.val 的 this 指向 obj ,而下一行的 val 指向 window。所以,由 window.val 输出 2,obj.val 输出4,最后一行func(); 的调用者是 window, 所以,现在的 this.val 的 this 指向 window,刚刚window.val已经是2了,
所以现在this.val = 2;的执行结果就是4,然后val=2;的执行结果,就是8了。所以,最终的结果就是输出2、4、8、8
var func = obj.dbl; 这一步已近改变了this指向全局
当执行func();的时候this.val = 2;val = 2;都是对全局变量的修改 默认全局为1 相当于122
然后console. log('val:', val) ;console. log( 'this.val:', this.val) ;都是打印修改后的全局变量而已
func();执行一次1 乘以 2 乘以 2 执行两次1 乘以 2 乘以 2 乘以 2 乘以 2
楼上是正解
我就不说答案了
题主可以去了解一下
this的四种指向 资料书籍网上都挺多的
· 对象调用
· 函数调用
·构造器调用
·apply调用
有了这四种this指向后 题主一定会引刃而解其他this指向问题
希望能够帮助到你
加油?
最后一行func()
和window.func()
一样。
其中
window.func = function() {
this.val *= 2;
val *= 2;
console. log('val:', val) ;
console. log( 'this.val:', this.val) ;
}
10 回答11.2k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.3k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
第一句把函数引用赋值给一个变量,会造成 this 丢失,所以 func 内部的 this 是指向全局对象的。所以函数内部 this.val => window.val => val => 1 。这三个是相等的。
所以结果是:
this.val = this.val * 2 => 2
val = val * 2 => 4