js的函数上下文
先来个小梨子
function A() {
this.m = 10;
}
function B() {
this.m = 20;
}
A.call(B);
B.call(A);
let a = new A();
let b = new B();
console.log(a.m==B.m); // true
console.log(b.m==A.m); // true
不废话,上代码,说结论。
let a = 20;
let obj = {
a:10,
b:function(){
return this.a++;
}
}
console.log(obj.b()); //10
console.log(obj.a); //11
var a = 20;
let obj = {
a:10,
b:function(){
setTimeout(function(){
console.log(this.a); //20
},100);
}
}
obj.b();
But,var换成let,会怎样呢?
let a = 20;
let obj = {
a:10,
b:function(){
setTimeout(function(){
console.log(this.a); //undefined
},100);
}
}
obj.b();
结果是:undefined
结论:let有个小特性,就是在全局(也就是window)下,用let声明的变量不再属于window。
->来个小案例练练手吧
var b = 20;
const obj = {
b:10,
c:function(){
setTimeout(function(){
return this.b++;
},100);
}
}
console.log(obj.c());
测测打印的结果是什么?