this 指向问题
普通函数的this由调用规则来确定,而箭头函数的的this(本身没有this)取决于父作用域的this
代码执行后,箭头函数取决于父级作用域的this,只跟随父作用域的this改变而改变,普通函数的this取决于调用方式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!--<script src="../lib/Promise.js"></script>-->
<script>
let p = new Promise((resolve, reject) => {
resolve(1)
})
let __this
Promise.prototype.getThis = function () {
__this = this
}
p.getThis()
console.log(__this===p)
</script>
</body>
</html>
构造函数的原型对象是一个对象,里面的方法的this指向调用者,谁调用就指向谁
JavaScript 作用域链的问题
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
let a = 2
function test(callback) {
let a = 1
callback(a)
}
test(function () {
console.log(a) // 2 回调函数自己的作用域没有a,向上查找,找到父级作用域的a=2
})
test(() => {
console.log(a) // 2 同理
})
test((a) => {
console.log(a) // 1
})
function test1() {
let a = 3
console.log(a) // 2
}
test1()
function test2() {
let a = 3
console.log(a) // 3
}
test2()
let obj={
birth: 1990,
getAge: function () {
console.log(this)
let fn = () => {
console.log(this)
return new Date().getFullYear() - this.birth
}
return fn();
}
};
console.log(obj.getAge())
let x = obj.getAge;
console.log(x())
</script>
</body>
</html>