在Javascript中是否有“全局函数”或“主函数”?

4

对我来说,在Javascript中变量很容易理解:如果变量不在局部作用域内,则它是全局对象中的字段。

但是,Javascript命令怎么样?如果我只是在文件中编写了Javascript命令(在任何函数之外),那么Javascript引擎会如何解释它?

----- file.js -----
console.log('hai:DDD');
--- end of file ---

它会创建一种“全局”或“主要”函数类型的对象来存储命令,然后执行它吗?如果有多个带有代码的文件怎么办?

我猜这个问题只适用于Node.js,因为在浏览器中所有的Javascript代码都是事件处理程序。


在JS中没有主入口点的概念,但你应该在你的代码中定义一个。 - plalx
5个回答

6
JavaScript没有main函数。它从顶部开始向下工作。在Node.js中,变量存储在模块范围内,这基本上意味着它们不是全局的。你可以想象在Node.js中运行的任何代码都像这样被包装起来:
(function(exports, require, module, __filename, __dirname) {
   ...
})();

但是你好像对浏览器有一个误解。并不是所有的JS代码都是浏览器中的事件处理程序。如果你只是在浏览器中运行一个基本脚本,它也会填充全局范围。

var myGlobal = "I'm available to everyone";

3

Javascript是一种脚本语言,需要由Javascript解析器进行解释。因此,“主要函数”可以被看作整个文件,入口点位于脚本第一行的第一个字符处。通常情况下,脚本要执行的所有功能都包含在一个随页面加载的函数中,但这不是必需的,只是方便。


1
在JavaScript中没有全局函数,但有一些类似的概念:
  • 全局环境(10.2.3)

    全局环境是在任何ECMAScript代码执行之前创建的一个独特的词法环境。全局环境的环境记录是一个对象环境记录,其绑定对象是全局对象(15.1)。全局环境的外部环境引用为null。

  • 全局对象(15.1)

    用作全局环境的环境记录绑定的唯一对象。

  • 全局代码(10.4.1, 10.1)

    全局代码是被视为ECMAScript 程序的源文本。特定程序的全局代码不包括解析为函数体的任何源文本。

  • 全局执行上下文(10.4.1.1)

    全局代码的执行上下文。


0
不,JavaScript是一种脚本语言,没有插入点。
代码行按照JavaScript解释器遇到的顺序执行。
如果页面中包含多个文件,则声明在其中的函数和变量将被添加到全局作用域中(除非它们在匿名函数中声明)。

0

这里有一个视频链接,观看后可以了解JavaScript的工作原理。 视频链接

还有一个可视化JavaScript工作原理的工具链接。 工具链接

如果你想在窗口加载后运行代码,可以使用window.onload或者$(document).ready()(如果你使用Jquery)。


2
虽然这些链接可能会有所帮助,但如果这些链接失效了,你应该在这里包含相关信息。参考链接:http://stackoverflow.com/help/how-to-answer - Mike Cluck

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接