zoukankan      html  css  js  c++  java
  • 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的运行机制有所了解了吧。收笔。

     

  • 相关阅读:
    KNN 与 K
    k 近邻算法(k-Nearest Neighbor,简称kNN)
    ANN神经网络——Sigmoid 激活函数编程练习 (Python实现)
    ANN神经网络——实现异或XOR (Python实现)
    Logistic Regression 之错误翻译
    浅谈回归(二)——Regression 之历史错误翻译
    浅谈回归Regression(一)
    交叉验证 Cross validation
    Git学习-Git时光机之版本回退(二)
    ubuntu16.04安装网易云音乐
  • 原文地址:https://www.cnblogs.com/cczw/p/2784139.html
Copyright © 2011-2022 走看看