var obj1={
num:4,
fn:function(){
num:5;
var f=() => {
num:6;
console.log(this.num);
//4 外层非箭头函数包裹,指向fn的作用域,即obj1
var f2=() => {
console.log(this.num);
//4 外层箭头函数包裹,向上寻找非箭头函数,指向fn的作用域,即obj1
}
f2();
}
f();
}
}
obj1.fn();
function foo() {
console.log(this) //window
setTimeout(() => {
console.log(this) // window
console.log('id:', this.id);
}, 100);
}
var id = 10;
foo()
var obj = {
x:100,//属性x
show(){
console.log(this) // obj
setTimeout(() => {
console.log(this) // obj
},1000);
}
};
obj.show();
function foo() {
console.log(this)
//本是window,但使用call更改了this,故为{id:100}
setTimeout(() => {
console.log(this)
// 本应该指向foo的作用域,但由于外层非箭头函数使用call更改了this,故为{id:100}
console.log(this.id); // 100
}, 1000);
}
var id = 10;
foo.call({id:100})
var obj={
a:10,
func:()=>{
console.log(this); //window
},
test:function(){
console.log(this); // obj
setTimeout(()=>{
console.log(this); //obj
this.func();
},1);
}
}
obj.test();
var obj = {
func: function() {
console.log('func')
},
say: function(){
console.log(this) // obj
setTimeout(()=> {
console.log(this) //obj
this.func() // ‘func’
}); //
}
}
obj.say();
var obj = {
func: function() {
console.log('func')
},
say: () =>{
console.log(this) // window
setTimeout(function () {
console.log(this) //window
this.func() // 报错,window下没有func方法
}); //
}
}
obj.say();
var obj = {
func: function() {
console.log('func')
},
say: () =>{
console.log(this); // window
var b=() =>{
console.log(this) //window
this.func() // 报错,window下没有func方法
} //
b()
}
}
obj.say();
var obj = {
say: function () {
'use strict';
// 严格模式下,没有宿主调用的函数中的this是undefined
var f1 = function () {
console.log(this); // undefined
setTimeout(() => {
console.log(this); // undefined
})
};
f1();
}
}
obj.say()