<script> str = "window"; const obj = { str: "object", fn: () => { console.log(this.str); }, fn2: function () { console.log(this.str); return { str: "newObj", fn: () => { console.log(this.str); } } }, }; obj.fn(); obj.fn2(); </script>
时间: 2024-02-10 21:23:01 浏览: 60
Vue源码中要const _toStr = Object.prototype.toString的原因分析
这段代码与上一个代码段的区别在于,它在定义变量 str 时没有使用 var、let 或 const 关键字,因此 str 变量被定义在全局作用域中。
在调用 obj.fn() 时,箭头函数的 this 仍然指向全局对象,因此控制台会输出 "window"。
在调用 obj.fn2() 时,普通函数的 this 指向的是调用该函数的对象,也就是 obj 对象。因此,控制台会输出 "object"。此外,fn2 函数返回了一个包含 str 和 fn 两个属性的新对象,其中 fn 是一个箭头函数,它的 this 仍然指向全局对象,因此控制台会输出 "window"。
阅读全文