美文网首页预解析
JavaScript 变量提升和函数提升

JavaScript 变量提升和函数提升

作者: 卓三阳 | 来源:发表于2018-07-14 20:17 被阅读90次
    一、变量提升

    在ES6之前,JavaScript没有块级作用域,只有全局作用域和函数作用域。

    1.所指的形式:必须有关键字var
    2.提升的方式:将变量声明提升到它所在作用域的顶部。
    3.示例代码:

    console.log(v1);      //undefined
    var v1= 'v1 is good';
    console.log(v1);     //v1 is good
     
    function fn () {
      console.log(a1); // undefined
      var a1= 'a1 is not good';
      console.log(a1); // v1 is good
    }
    fn();
    
    

    之所以会是以上的打印结果,是由于js的变量提升,实际上上面的代码是按照以下来执行的:

    var v1;               //变量提升,全局作用域范围内,此时只是声明,并没有赋值
    console.log(v1);      //undefined
    v1= 'v1 is good';     // 此时赋值
    console.log(v1);      //v1 is good
     
    function fn () {
       var a1;      // 变量提升,函数作用域范围内
      console.log(a1); // undefined
      a1= 'a1 is not good';  
      console.log(a1); // a1 is good
    }
    fn();
    

    不用关键字,let 和const定义变量,提前使用,会报ReferenceError的错误。


    二、函数提升

    s中创建函数常见的两种方式:函数声明式和函数字面量式。只有函数声明才存在函数提升!

    console.log(f1); // function f1() {}   
    console.log(f2); // undefined  
    function f1() {}
    var f2 = function() {}
    

    函数的提升过程

    function f1() {} // 函数提升,整个函数声明代码块提升到当前作用域的顶部 
    console.log(f1);   
    console.log(f2);   
    var f2 = function() {}
    

    相关文章

      网友评论

        本文标题:JavaScript 变量提升和函数提升

        本文链接:https://www.haomeiwen.com/subject/gjfypftx.html