特别是对象,我不明白对象的哪些部分在初始化之前运行,什么部分在初始化时运行以及什么时候运行。
编辑:似乎parsetime是错误的单词。我想我应该制定一个问题“在2遍读取中,第一遍读取了什么,第二遍读取了什么?”
答案 0 :(得分:31)
javascript文件以2遍读取方式运行。第一遍解析语法并收集函数定义,第二遍实际执行代码。通过注意以下代码可以看到这一点:
foo();
function foo() {
return 5;
}
但以下不是
foo(); // ReferenceError: foo is not defined
foo = function() {
return 5;
}
但是,这并不是很有用,因为第一遍中没有任何执行。您根本无法使用此功能来更改逻辑。
答案 1 :(得分:4)
不确定你的确切要求,所以我会分享我所知道的。
JavaScript函数是“预先加载”并存储在浏览器的内存中,这意味着当您在页面的最末端声明了函数并且代码在最开始时调用它时,它将起作用。
请注意,全局变量(即在函数外部分配的任何变量)都不会被预加载,因此只能在声明后才能使用。
函数外的所有命令都将按它们出现的顺序进行解析。
JavaScript实际上没有“运行时”,它只能响应事件或通过全局计时器执行代码。任何其他代码都将被解析并“忘记”。
答案 2 :(得分:3)
虽然JavaScript的直接祖先是Scheme,但JavaScript并没有继承宏,所以答案很简单:在解析时,从不运行任何代码。
答案 3 :(得分:2)
与C ++不同,它无法在Javascript解析器中运行逻辑。
我怀疑您在询问哪些代码会立即运行以及在创建每个对象实例时运行的代码。
答案是你调用的函数中的任何代码只会在你调用函数时运行,而函数外的任何代码都会立即运行。
答案 4 :(得分:1)
粗略地说,Interpreter首先获取所有变量和函数,然后它们被提升并执行。
有关详细信息,我希望这些链接可能会有所帮助: