深入JavaScript Day05 - 箭头函数不绑定this
2022-01-13 本文已影响0人
望穿秋水小作坊
1、var that = this
这样的代码在老一些代码中经常见到,现在可以被什么替代了?
- 抓住箭头函数不绑定this,并且会去上层作用域中【找this指向】的特性。
- 所以我们用箭头函数,替代了
var that = this
这种不太优雅的写法。
2、误区矫正:大括号不是块级作用域,也可能是在定义对象!!!
var obj = {
name: "obj",
foo: () => {
// obj的大括号只是定义对象,不要认为是一个作用域
// 所以这个函数的上层作用域是全局
console.log(this);
},
};
obj.foo();
function Student() {
this.foo = () => {
// 这个函数的上级作用域就是Student的大括号了
console.log(this);
};
}
var stu = new Student();
stu.foo();
3、依然会错的面试题
- 面试题三
var name = "window";
function Person(name) {
this.name = name;
this.foo1 = function () {
console.log(this.name);
};
this.foo2 = () => console.log(this.name);
this.foo3 = function () {
return function () {
console.log(this.name);
};
};
this.foo4 = function () {
return () => {
console.log(this.name);
};
};
}
var person1 = new Person('person1')
var person2 = new Person('person2')
person1.foo1()
person1.foo1.call(person2)
person1.foo2()
person1.foo2.call(person2)
person1.foo3()()
person1.foo3.call(person2)()
person1.foo3().call(person2)
person1.foo4()()
person1.foo4.call(person2)()
person1.foo4().call(person2)