多少JavaScript程序执行的一个网页浏览器?
-
03-10-2019 - |
题
JavaScript程序包括报表和功能的声明。当JavaScript执行程序,这两个步骤:
代码扫描功能的声明和每一个函数。《宣言》是"执行"(通过创建一个函数目)及一名参考这一职能是创建(使这种功能可以从内的一个声明)
该声明是执行(评估)的顺序(因为他们出现在代码)
因此,这个 工作就好了:
<script>
foo();
function foo() {
return;
}
</script>
虽然"foo"功能是所谓的之前就宣布,它的工作,因为功能宣言》进行评估之前发言。
然而,这个 不工作:
<script>
foo();
</script>
<script>
function foo() {
return;
}
</script>
一ReferenceError会被扔("foo没有定义").这导致结论,即每一个脚本元素内HTML码的网页表示一个单独的JavaScript程序和每次HTML分析程序遇到的一个脚本的元素,它的执行程序的内部元件(然后一旦执行程序,分析器移到HTML的代码如下的脚本元素)。
然后,这种 不工作:
<script>
function foo() {
return;
}
</script>
<script>
foo();
</script>
我的理解是,全球对象(其作为变量对象在全球的执行方面)是否存在(并仍然是)在所有时间,所以第一JavaScript程序,将创建的函数目和作参考之用,然后第二JavaScript程序将使用参考电话的功能。因此,所有JavaScript程序(在一个单一的网-页)"使用"相同的全球目,并且所有变化,做到全球目通过一个JavaScript程序可以观察到所有的JavaScript运行的程序。
现在,请注意这个...
<script>
// assuming that foo is not defined
foo();
alert(1);
</script>
在上述情况下,将报警电话 不执行, ,因为"foo()"的发言引发ReferenceError(打破整个JavaScript程序),因此,随后的所有发言不要执行。
然而,在这种情况下...
<script>
// assuming that foo is not defined
foo();
</script>
<script>
alert(1);
</script>
现在,警报的呼叫 没有得到执行.第一JavaScript程序引发一ReferenceError(并因此符),但第二JavaScript程序运行正常。当然,浏览器将报告错误(尽管它没有执行后续JavaScript程序之后,发生错误).
现在,我的结论是:
- 每一个脚本元素内HTML码的网页表示一个单独的JavaScript程序。这些程序立即执行作为HTML分析程序遇到他们。
- 所有JavaScript程序在同一网页的"使用"相同的全球对象。全球对象的存在在所有时间(从目前的网页获取直到该网页被摧毁).JavaScript程序的可操作的全球目,并且所有变化,做到全球目通过一个JavaScript程序中可以观察到随后的所有JavaScript程序。
- 如果一个JavaScript程序的中断(通过具有一个错误),这并不妨碍随后的JavaScript程序来执行。
请的事实-检查后,并告诉我如果我得到了错误的东西。
此外,我还没有找到资源,解释该行为所提到的在这个岗位,并且我假定的浏览器制造商必须公布这种资源的地方,所以如果你知道关于他们,请提供链接。
解决方案
德米特里*梅德Soshnikov已经回答了你的问题。每 <script>
元件的执行作为一个节目,作为定义的写法规范。有一个全球目,每个节目的内的一个单页的使用。这是真的。
其他提示
职能提升的过程中,评估 function
发言的其余部分之前的功能是部分的写请参考标准(我不能找到一个参考的权利,但是我记得看到讨论的EMCAScript提及)。评估 script
标签的一部分HTML标准。它没有指明他们是"独立的程序"在这么多的话,但它确实说,剧本要素进行评估以它们出现在该文件中。这就是为什么功能在以后的剧本标记不悬挂:脚本没有被评估。这也解释了为什么一个脚本停止不切断其后的脚本:当前脚本停评估,在下一个开始。
他们是分开的程序,但他们修改了一个全球共同的对象。