这就是我要问的问题:
假设我在我的网站上
<script type="text/javascript" src="global.js"></script>
<script type="text/javascript">
someFunction();
someOtherFunction();
</script>
并假设someFunction
和someOtherFunction
是页面上使用的唯一函数,并且是global.js
中10,000个函数中的2个。显然,在这种情况下,浏览器会更好,仅查看global.js
中的那两个函数,并跳过不依赖于它们的所有内容,但以下哪种方式实际上是浏览器解析JS的方式? / p>
答案 0 :(得分:0)
1
<script type="text/javascript" src="global.js"></script>
将global.js的整个文本源加载到内存中。在当前的全局环境中解析并执行任何JavaScript代码。
2
<script type="text/javascript"> someFunction(); someOtherFunction(); </script>
在当前的全局环境中查找名为someFunction()
的函数并调用它。接下来查看名为someOtherFunction()
的函数的当前全局环境并调用它。完全没有关于它们在何处或如何定义的线索。
总而言之,浏览器将获取整个文件并解析并预先执行所有包含的代码,因为这是语言的设计。它不会期待或编译&#34;一次性页面中的所有JavaScript代码。
答案 1 :(得分:0)
这是一个很好的问题!
作为对您的问题的回答,#1 是最正确的,因为在脚本加载期间解释器确实解析了所有函数,而不仅仅是包含脚本引用的函数。
首先,只要include语句执行整个JS文件就会加载到客户端的浏览器缓存中。此时,global.js被浏览器的Javascript引擎解析,解释和执行。然后,在global.js中声明的任何全局函数和变量都可以被包含的脚本使用。
然而,重要的是要注意,没有Javascript被编译成机器代码,而是根据ECMA标准进行词法分析和解释。
有关脚本加载的更多信息,请查看html5rocks上的这个优秀资源:Script Loading