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

  • 相关阅读:
    使用 git 托管代码
    转载自网络大神
    i18n 国际化
    转自知乎大神---什么是 JS 原型链?
    转自知乎大神----JS 闭包是什么
    转自知乎大神----JS 的 new 到底是干什么的?
    转载自知乎大神---this 的值到底是什么?一次说清楚
    sql查看本机IP地址
    Python 编码规范(Google)
    Python在mysql中进行操作是十分容易和简洁的
  • 原文地址:https://www.cnblogs.com/imelemon/p/7687382.html
Copyright © 2011-2022 走看看