【问题标题】:How to make variables accessible outside of their scope in JavaScript如何在 JavaScript 中使变量在其范围之外可访问
【发布时间】:2021-01-21 19:39:12
【问题描述】:

我是 JavaScript 新手,正在学习范围。 我知道有全局作用域和局部作用域,但想知道局部作用域中的变量是否可以在其作用域之外使用。

这可能吗?如果可以,怎么做?

感谢大家的快速回复。

我正在学习编程,并且我有一个关于程序员研究主题的大纲。他们说有一种方法,即使这是不好的做法,也可以用作开发人员工具,并且在某些情况下会有所帮助。

【问题讨论】:

  • 让它们全球化。但这是一个不好的做法。变量作用域的存在是有原因的。
  • 您要求的东西从根本上与自己相反。如果将局部变量设为全局变量,则它不再是局部变量。这就像在说“我想要一只长颈鹿,但我想要它是一头狮子”。请添加更多细节并准确解释您要执行的操作,因为这听起来很像 XY 问题。
  • 现在还有块作用域。我还假设当您说本地范围时,您的意思是“功能”范围?
  • 在大多数浏览器的开发工具中,您可以在代码中调用 console.log 并以这种方式检查变量...有时您甚至可以右键单击输出并将其分配给全局范围。

标签: javascript scope


【解决方案1】:

您可以将它们分配给globalThis(在浏览器中也称为window,在节点中称为global):

function assignGlobal(x) {
  globalThis.globalVar = x;
}

console.log(globalThis.globalVar);

assignGlobal('foo');

console.log(globalThis.globalVar);

警告:这通常被认为是不好的做法。以一种无需分配给全局范围的方式来重构代码通常很容易。

对于调试,您通常可以调用console.log(myObject) 并在您的开发者控制台中检查它(f12 in chrome;Ctrl + Shift + k 在 Firefox 中)。然后,您可以右键单击输出并选择“存储为全局变量”之类的内容:

  • 右键→另存为全局变量

【讨论】:

  • @SebastianSimon 谢谢,已修复
  • 谢谢你的回答。根据您的经验,什么时候这样做会有帮助?
  • @Becca 根据我的经验,仅在为无权访问 ES Modules 的用户发布库时(例如,对于 Internet Explorer 11)。就我个人而言,我已经好几年没有分配到全局范围了。
  • 感谢鲁纳尔!您对此的回答和分享的经验非常有帮助。我接受这个作为答案。我希望我可以投票,但我没有足够的声誉。
  • @Becca 别担心。我相信你会在某个时候得到一个积极的问题,这会让你获得投票的特权;-)
猜你喜欢
  • 1970-01-01
  • 2011-02-14
  • 1970-01-01
  • 2023-04-07
  • 2020-08-06
  • 1970-01-01
  • 2014-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多