JS中的变量提升与函数提升

JavaScript是函数级作用域,不同于C系语言中的块级作用域。

JavaScript中会存在变量与函数提升问题

  1. 变量提升,只会提升变量声明,赋值不会提升,代码如下:
  
//变量提升
(function() {
    var a = 'one';
    var b = 'two';
    var c = 'three'
})();
//提升后变成:
(function() {
    var a, b, c;//只提升变量的声明,赋值并不会提升上来。
    a = 'one';
    b = 'two';
    c = 'three';
})();
View Code

  2. 函数提升:

  JavaScript中函数有两种写法:

  函数表达式 var fn=function (){//some code}

  函数声明方式 function fn(){//some code}

  只有函数声明式写法的函数才会被提升,与变量提升不同的是,函数体也会一同被提升,也就是把整个函数都提到前面去。

  代码如下:  
  
//函数提升
(function test1() {
    fn();
    function fn() {
        console.log("我来自 fn test1");
    }
})();
test2();
function test4() {
    fn(); //TypeError: fn is not a function  
    var fn = function () {
        console.log("我来自 fn test2");
    }
        fn();
}
View Code

 

  

 

posted @ 2017-03-29 20:47  Yann001  阅读(211)  评论(0编辑  收藏  举报