提问人: 提问时间:7/27/2022 更新时间:7/27/2022 访问量:318
“this”关键字不是指我的 javascript 程序中的全局对象
"this" keyword does not refer to global object in my javascript program
问:
我通过使用 javascript 来检查箭头函数中的工作原理来实现此代码。this
variable = 'Global variable';
function normalFunc () {
console.log(this.variable);
}
const arrowFunc = () => {
console.log(this.variable);
};
const objNormal = {
variable: 'Inner variable',
func: normalFunc
};
const objArrow = {
variable: 'Inner variable',
func: arrowFunc
};
objNormal.func();
objArrow.func();
arrowFunc();
我了解到在箭头函数中指的是全局对象,所以我期望这样的输出👇this
Inner variable
Global variable
Global variable
但实际输出是这样的......👇
Inner variable
undefined
undefined
实际上,这真的很奇怪,因为这取决于在哪里运行这段代码......在 JS Fiddle 中,按我所期望的方式引用全局对象。但是在我的终端和这个游乐场站点中,不是指全局对象。this
this
我是否误解了代码,或者只是我的代码中缺少某些内容?this
请帮助我理解为什么会发生这种情况。
答:
3赞
Samathingamajig
7/27/2022
#1
链接的网站将 JS 代码转译为函数内部,因此不是 .如果将第一行更改为this
window
this.variable = 'Global variable';
代码按预期工作。
当它粘贴到文件 () 并使用 () 运行时,关键字是一个空对象,而是完全不同的东西。这与在 REPL 模式下运行此代码不同,其中 ..js
filename.js
node
node filename.js
this
global
this === global
在这两种情况下,当您只说 时,您正在分配给 或 ,因此您无法使用 .variable = 'Global variable';
window.variable
global.variable
this.variable
评论
0赞
7/27/2022
非常感谢您的评论!这对我有很大帮助!我在 REPL 中运行这段代码,这真的很有趣......我了解到我永远不应该在箭头函数中使用“this”。再次感谢!
1赞
Samathingamajig
7/27/2022
这并不是说你永远不应该在箭头函数中使用,它有它的用途。您唯一不知道的是,在某些环境中,入口点不是 /,并且没有在范围内用 // 声明的同名变量的变量赋值将始终赋值给 /。一个箭头函数,无论它在哪里定义,都可能很有用,所以不要只是把它当作“我永远不应该使用”的东西,因为那样你只是在限制自己this
this
window
global
var
let
const
window
global
this
0赞
7/28/2022
我会牢记在心的!非常感谢您的建议🙏
评论