dave-wind / blog

native javascript blog
0 stars 0 forks source link

this 指向问题 #14

Open dave-wind opened 1 year ago

dave-wind commented 1 year ago

setTimeout 指向

let obj = {
    name: "dave",
    show: function () {
        setTimeout(() => {
            console.log('20------', this)
        }, 20)
        setTimeout(function () {
      console.log('100-----', this)
        }, 100)
    }
}
obj.show();
// 客户端情况下:
// 20----- {name:"dave",show:xxxx}
// 100-----window
// node端:
// 20----- {name:"dave",show:xxxx} 
// 100 ------ Timeout 类

因为在异步执行代码时, function{} 执行作用域在浏览器端 就是 window; 剪头函数就会执行上级非作用域
但是在 node 层 很有意思的 是 100---- 指向Timeout类 原因很简单 Eventloop 里面 收集settmeout 的 就是 timer 阶段 哈哈哈哈

箭头函数与 function {} 区别

就在于 剪头函数不能绑定this
也不能用作构造函数