Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 编译是在脚本解析后立即进行还是延迟进行?_Javascript - Fatal编程技术网

Javascript 编译是在脚本解析后立即进行还是延迟进行?

Javascript 编译是在脚本解析后立即进行还是延迟进行?,javascript,Javascript,考虑HTML页面中包含的脚本 <script> function fn(){ // code return new Function(); } </script> 函数fn(){ //代码 返回新函数(); } 当上面的HTML页面文档在我的浏览器窗口中呈现时,我可以称之为解析文档吗 编译是否与解析文档同时发生?这两个过程之间到底有什么区别 语句returnnewfunction()是否与fn()的解析和编译同时进行 脚本

考虑HTML页面中包含的脚本

<script>
     function fn(){
      // code
      return new Function();
     }
</script>

函数fn(){
//代码
返回新函数();
}
  • 当上面的HTML页面文档在我的浏览器窗口中呈现时,我可以称之为解析文档吗

  • 编译是否与解析文档同时发生?这两个过程之间到底有什么区别

  • 语句
    returnnewfunction()
    是否与
    fn()
    的解析和编译同时进行


  • 脚本可以在页面上紧随其后的HTML元素加载到DOM之前运行。对于初学者来说,这通常是一个问题,他们发现他们试图操纵的元素没有定义。通常的做法是将javascript附加到文档的加载事件,以确保在操作它们之前所有DOM元素都已就位。不过,如果你想利用这种跑步的渴望,我不确定。这取决于你想做什么。不过,如果您在定义更多javascript之前(可能在页面的后面)定义了一些javascript,那么第一块javascript将存在并可访问,这是一个相当安全的赌注

  • 编译确实会发生,但它是特定于实现的。通常,它在运行时编译成字节码。这意味着它在运行时会逐步遍历“文本”,当它完全解释语句时,会将其转换为一种准汇编语言,便于浏览器的javascript引擎执行。一旦你考虑到函数定义的优先级、作用域等因素,这就有点复杂了,但这是最基本的想法。一个javascript引擎可能与另一个不同,因此并不总是相同的

  • 我不确定

  • 当上面的HTML页面文档在我的浏览器窗口中呈现时,我可以称之为解析文档吗

    不可以。您的文档是从上到下解析的。如果脚本位于顶部,则将首先执行它。如果它在文档的末尾,它将最后执行

    编译是否与解析文档同时发生?这两个过程之间到底有什么区别

    请参阅我对第一个问题的回答。解析文档涉及构造DOM树。
    脚本
    标记是DOM树的一部分

    语句return new Function()的解析和编译是否与fn()的解析和编译同时进行


    在代码中调用
    函数fn()
    时将返回新函数()。如果从未调用它,那么只会有一个对函数的陈旧引用。您必须调用
    fn()
    ,以便它返回新函数或任何您要返回的对象。

    作为一种优化技术,它是延迟的,但这对您来说并不重要。为什么您想知道?在页面上紧随其后的HTML元素加载到DOM之前,脚本可能会运行。对于初学者来说,这通常是一个问题,他们发现他们试图操纵的元素没有定义。通常的做法是将javascript附加到文档的
    load
    事件,以确保所有DOM元素在操作它们之前都已就位。不过,如果你想利用这种跑步的渴望,我不确定。这取决于你想做什么。@Paul:不,不,我不是初学者,我知道在哪里包含脚本window.onload,$(document.ready().1。对2.紧接着,一旦脚本标记被解析(内联)或加载(外部延迟)或加载,先前的标记被加载并解析(外部同步)。3.fn()是用脚本标签解析的,但是函数()的结果在fn被执行之前是不存在的。根据我的理解,任何函数都不会被超越,除非调用它(运行时)。@ShirgillAnsari yep。我看过你创建的工具。相信我,这真是太神奇了。@ShirgillAnsari非常感谢,我很高兴它对你有用!