zoukankan      html  css  js  c++  java
  • js中变量声明提前

    demo1:

    var a=10;
    
    function b(){alert(a); var a=20; alert(a)}
    
    b()//undefined 20

    因为:js编译器在执行b这个函数时,会把函数中声明的变量提前到最前面进行声明;上面的函数b等同于:

    function b(){var a; alert(a); a=20; alert(a);}

    不难看出最终的结果就是 undefined 20

    demo2:

    var a=10;
    
    function b(){alert(a); a=20; alert(a);}
    
    b()// 10 20

    js在执行函数b时,在函数自身作用域内没有找到变量a的声明,就向上查找,找到全局变量a,所以第一个10; 再b中给全局变量a重新赋值。所以第二次是20;

    demo3:

    var a=10;
    
    function b(){
    
      a=20;
    
    return;
    
    function a(){}
    
    }
    
    b(); alert(a);//10

    因为:

    js在执行函数b时,虽然定义a函数之前已经return了,但是js编译器会把function a(){} 编译成 var a=function(){};

    js变量声明提前,所以在函数b中也有自己的局部变量a,在赋值的时候就直接赋值函数内部的局部变量,而不会改变全局

    变量a了,所以最终的执行结果是10;

    demo4:

    var a=10;
    
    function b(){
    
      a=20;
    
    return ;
    
    a=30;
    
    }
    
    b();
    
    alert(a);//20; return 之后的代码不执行

    demo5:

    var a=10;
    
    function b(){
    
      a=20;
    
    return ;
    
    var a=30;
    
    }
    
    b();
    
    alert(a);//10;

     声明变量提前,b有自己的局部变量a,就不会修改全局变量a的值,所以最终的值是10

  • 相关阅读:
    POJ 3255 Roadblocks
    KMP算法的前缀next数组最通俗的解释
    HDU 1829 A Bug's Life
    HDU 1879 继续畅通工程
    课程设计:学生管理系统(c++)
    HDU 1016 Prime Ring Problem
    HDU 4310 Hero
    素数筛选法<单向链表实现>
    【未完】训练赛20190304:KMP+树状数组+线段树+优先队列
    畅通工程:并查集入门裸题
  • 原文地址:https://www.cnblogs.com/xiaofenguo/p/10573170.html
Copyright © 2011-2022 走看看