zoukankan      html  css  js  c++  java
  • javascript变量声明提升和函数声明提升

     在ES6之前,JavaScript没有块级作用域(一对花括号{}即为一个块级作用域),只有全局作用域和函数作用域。变量提升即将变量声明提升到它所在作用域的最开始的部分。

    JS的解析过程分为两个阶段:预编译期(预处理)与执行期。

     预编译期JS会对代码块中的所有声明的变量和函数进行处理(类似与C语言的编译),但需要注意的是此时处理函数的只是声明式函数,而且变量也只是进行了声明但未进行初始化以及赋值。
    console.log(a);//undefined
    if (!("a" in window)) {
      console.log(1)
        var a = 1;
    }
    console.log(a);//undefined
    

      

    function b (x) {
        return x * 2;
    }
    var b;
    console.log(b);//ƒ b (x) {return x * 2;}
    

      

    console.log(f1()); //aa、aaa
    console.log(f2);  //undefined
    function f1() {console.log('aa');return 'aaa';} 
    var f2 = function() {}
    

      

    alert(a);//function a(){alert(10);}
    a();//10
    var a=3;
    function a(){
       alert(10);
    }   
    alert(a)//3
    a=6;
    a();//TypeError: a is not a function

     

    function test(){
        console.log("函数声明");
    }
    var test;
    console.log(test);   
    test = "变量";
    

      

    上面代码打印结果:

    ƒ test(){
    console.log("函数声明");
    }
    函数提升优先级比变量提升要高,且不会被变量声明覆盖,但是会被变量赋值覆盖。

     总结:

    1、js声明会提升,初始化不会提升!

    2、js中创建函数有两种方式:函数声明式和函数字面量式。只有函数声明才存在函数提升!

    日益努力,而后风生水起。众生皆苦,你也不能认输O(∩_∩)O
  • 相关阅读:
    java 反射
    java 面试题
    Java构造和解析Json数据的两种方法详解一
    JAVA UUID 生成
    tomcat 插件
    webstorm 激活码
    maven环境搭建
    svn 安装网站
    2015.6.30 反弹的教训(想做T)
    2015.6.15 惨跌开始的反思
  • 原文地址:https://www.cnblogs.com/yingliyu/p/7687382.html
Copyright © 2011-2022 走看看