“this”关键字不是指我的 javascript 程序中的全局对象

"this" keyword does not refer to global object in my javascript program

提问人: 提问时间:7/27/2022 更新时间:7/27/2022 访问量:318

问:

我通过使用 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 中,按我所期望的方式引用全局对象。但是在我的终端和这个游乐场站点中,不是指全局对象。thisthis

我是否误解了代码,或者只是我的代码中缺少某些内容?this

请帮助我理解为什么会发生这种情况。

javascript node.js 函数 这个 箭头函数

评论


答:

3赞 Samathingamajig 7/27/2022 #1

链接的网站将 JS 代码转译为函数内部,因此不是 .如果将第一行更改为thiswindow

this.variable = 'Global variable';

代码按预期工作。

当它粘贴到文件 () 并使用 () 运行时,关键字是一个空对象,而是完全不同的东西。这与在 REPL 模式下运行此代码不同,其中 ..jsfilename.jsnodenode filename.jsthisglobalthis === global

在这两种情况下,当您只说 时,您正在分配给 或 ,因此您无法使用 .variable = 'Global variable';window.variableglobal.variablethis.variable

评论

0赞 7/27/2022
非常感谢您的评论!这对我有很大帮助!我在 REPL 中运行这段代码,这真的很有趣......我了解到我永远不应该在箭头函数中使用“this”。再次感谢!
1赞 Samathingamajig 7/27/2022
这并不是说你永远不应该在箭头函数中使用,它有它的用途。您唯一不知道的是,在某些环境中,入口点不是 /,并且没有在范围内用 // 声明的同名变量的变量赋值将始终赋值给 /。一个箭头函数,无论它在哪里定义,都可能很有用,所以不要只是把它当作“我永远不应该使用”的东西,因为那样你只是在限制自己thisthiswindowglobalvarletconstwindowglobalthis
0赞 7/28/2022
我会牢记在心的!非常感谢您的建议🙏