• 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中创建函数有两种方式:函数声明式和函数字面量式。只有函数声明才存在函数提升!

  • 相关阅读:
    这是一棵树吗
    感染者
    es6 语法
    css3 flex 详解,可以实现div内容水平垂直居中
    移动端实现复制内容至剪贴板小例子
    jq+mui 阻止事件冒泡
    移动端H5 判断IOS还是Android 平台
    移动端布局 rem,和px
    关于H5移动端开发 iPhone X适配
    H5 微信公众号 监听返回事件
  • 原文地址:https://www.cnblogs.com/imelemon/p/7687382.html
Copyright © 2020-2023  润新知