zoukankan      html  css  js  c++  java
  • 作用域3—JS学习笔记2015-6-11(第55天)

    复习作用域,彻底的理解js的运行机制;

    首先在js代码运行之前,会进行预解析,至少会进行2步:

    1、找一些东西——> var、function、参数等关键字,在js运行之前会给他们一些相应的动作

              比如变量会赋值 undefined;函数的内容就整个函数块;

                                如果遇到重名的情况下,留下函数,变量剔除;如果函数名也相同,则按照顺序

              留下后面的函数;

    2、逐行读取代码;

    比如下面的代码,如果不理解这种机制,我就认为第一个弹出的alert里面的值是 undefined;

    然而实际上第一个是 function a(){ alert(5);} 这样一个函数块本身,最终留下的是alert(4)的

    这个函数;

    alert(a);
    var a = 1;
    alert(a);
    function a(){ alert(2);}
    alert(a);
    var a = 3;
    alert(a);
    function a(){ alert(5);}
    alert(a);

    表达式可以修改预解析的值,所以原来预解析里面的a = function a(){alert(5)} 就变成了 a=1;

    当js代码逐行运行到 var a = 1 的时候;

    因为表达式修改了预解析的值,所以后面的a();就会报错,为什么会报错?因为此时的预解析仓库里

    已经没有函数了,原先的a 已经被赋值为3了;

    alert(a);      //   function a(){ alert(5);}
    var a = 1;
    alert(a);      //  1
    function a(){ alert(2);}
    alert(a);    //    1
    var a = 3;
    alert(a);     //   3
    function a(){ alert(5);}
    alert(a);     //   3
    a();   //   报错   TypeError: a is not a function

      

  • 相关阅读:
    linux系统中完整删除逻辑卷、卷组、物理劵
    linux系统中逻辑卷缩容步骤
    问题
    新的一天开始了
    Solaris的版本命名
    Sun公司的操作系统:Solaris简介
    培训经历:Awakening the Dragon Within
    大本计算机专业该怎么学习?
    windbg 使用
    ubuntu 常用技巧
  • 原文地址:https://www.cnblogs.com/zhangxg/p/4570547.html
Copyright © 2011-2022 走看看