【问题标题】:V8 / JS runtime: how are JavaScript window functions available without prefix "window"V8 / JS 运行时:如何在没有前缀“window”的情况下使用 JavaScript 窗口函数
【发布时间】:2015-09-30 22:51:16
【问题描述】:

我对 JS 控制台了解不多,但我正在转向命令行编程,在我开始在国外使用 shell/node 之前了解我的本地环境会很好

我的猜测是调用了所有命令行语句with (window) eval(/* whatever user typed before hitting enter/*),但这似乎是一种可怕的做法。如果我console.log(this),上下文肯定被绑定为“窗口”,但我不确定为什么/如何

这几乎就像用户cd'd 进入窗口对象以将其设置为上下文

【问题讨论】:

  • Node 中没有 window 对象。有一个全局上下文,但在 Node 中的工作方式与在浏览器中有所不同。
  • 你在问什么?关于命令行?关于window?如果是这样,您是否期望有一个等效的window.scrollX(例如)? (没有……)
  • 这就是全局作用域的工作方式。顶级作用域是绑定到全局对象的对象环境(浏览器中的window,节点中的global

标签: javascript node.js oop v8 prototypal-inheritance


【解决方案1】:

所有 JavaScript 都有一个全局范围。在浏览器中,全局范围被称为“窗口”,它是对窗口对象的引用。在 node 中称为“global”,指的是 node 中的全局 JS 命名空间。

浏览器中的“window”全局有很多属性。诸如“控制台”或“位置”之类的东西。当您想与这些代码对话时,您可以选择在调用前加上“window.”。示例:要将某些内容记录到控制台,您可以键入:

window.console.log("HELLO");

或者您可以离开“窗口”。不接电话,像这样:

console.log("HELLO");

浏览器中的全局“窗口”对象是页面上唯一的可选对象。每当您看到对未使用“var”(或 ES6 中的“let”和“const”)声明的变量的引用时,这意味着该变量只是全局对象上的一个属性。

【讨论】:

  • 对,如果它是 var console = function () {},我可以看到一个可用的全局变量,但我相信它实际上是 window.console = function () {...}window = (function () {this.console = function () {...}})() 而不是 window 是我们正在使用的一些功能范围向右添加线条??
  • 编辑了我的回复以包含您的答案。
猜你喜欢
  • 2022-01-09
  • 2013-10-24
  • 2016-03-24
  • 1970-01-01
  • 2011-04-29
  • 1970-01-01
  • 2017-07-05
  • 2011-02-25
  • 1970-01-01
相关资源
最近更新 更多