• javascript运行机制


    很多人对javascript的加载运行机制懵懵懂懂,包括我也是。所以整理出来备忘:

    一 先热热身,看看下面两段代码:

    //example 1

    alert(a);
    a=1000;
    //example 2
    alert(b);
    var b=1000;
    //example 3
    func();
    var func=function(){};

    这三个会咋样呢?第一个会直接报错,代码终止执行当前代码块,跳入下一个代码块开始执行;第二个呢会弹出undefined,第三个会直接报错func不是一个函数。为什么会有这样的差异呢?这就跟今天的主题有关系了,它们分别涉及到了javascript的两个运行阶段,预解析运行阶段

    二 预热结束,我们先系统的来了解一下javascript的运行过程,如下:

      1 上到下依次读入一个代码块(一个script标签)

      2 对该代码块进行语法分析,检查到语法错误则报错并终止该代码块运行,直接跳到下一个代码块运行。

      3 对代码块进行预解析,所有的var变量初始化为undefined,所有的function 预定义。(该步骤不会报错)

      4 逐行运行代码,有错则报错,并终止该代码块运行,跳到下一个代码块

      5 完事,进入下一个代码块的执行

    三 仔细想想, 大概就可以解释上面的问题了。下面我们一一来解释:

      第一个例子的错误出在第4步,因为代码没有语法错误,经过第2步预解析时虚拟机也没有发现a变量的定义(var),所以a压根没有定义,所以到第四步运行的时候就出现错误了,a变量未定义。

      第二个例子其实不是报错,只是经过预解析后的a变量被赋值为undefined,运行到alert(a)的时候,依然没有被赋值,所以就只有弹出undefined了。

      第三个有点意思,因为在预解析的时候,func被解释成了一个var变量,所以他的初始值是undefined,运行到func()的时候 func依然是undefined,还没有被定义成函数,所以程序就出现错误提示,func is not a function。

    举了这么几个例子大家应该对JavaScript的运行机制有所了解了吧。收笔。

     

  • 相关阅读:
    如何使用robots.txt及其详解
    有序列表
    前端开发大众手册(包括工具、网址、经验等)
    转载:Tim O'Reilly与John Battelle谈即将开幕的Web
    转载:iframe全跨域高度自适应解决方案
    javascript 学习笔记
    【C#文件夹锁】C#文件夹加锁小工具
    Pro Silverlight 5 in C# 分享
    在Winform窗体中使用WPF控件(附源码)
    【C#文件锁】C#加密解密文件小工具
  • 原文地址:https://www.cnblogs.com/cczw/p/2784139.html
Copyright © 2020-2023  润新知