• 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
  • 相关阅读:
    childNodes.length和form.length的不同
    外部样式表声明的样式并不会进入style对象
    js之insertBefore(newElement,oldElement)
    文字不换行,超出部分显示成省略号
    animation和transition做动画的区别
    html中隐藏一个元素的方法
    css常见属性和属性值
    css选择器的优先级
    frameset怎么框架内部跳转
    form表单标签及属性的介绍
  • 原文地址:https://www.cnblogs.com/yingliyu/p/7687382.html
Copyright © 2020-2023  润新知