让前端飞Web前端之路JavaScript 进阶营

JavaScript的变量提升和函数作用域

2018-08-17  本文已影响7人  小蝉_蝉

JavaScript 的世界,或者说编程的世界里,变量很重要,但是因为 JavaScript 的变量有些 幺蛾子般 的特性,所以总有各种奇怪的题目来考大家的应变能力。
我们先说说这幺蛾子般的特性是怎么来的,大家应该知道,JavaScript最早是花10天抄袭Java的语法而来,感觉很叼对不?然而,十天的后果是根本没有健壮性可言,俗称一堆bug......

变量声明

而这个变态的特性,在我看来就是最大的bug之一。所以,有时候看其他人乐此不比的推荐刷这种题目并且把它妖魔化的时候,我....难受。
幸好ES6出来新的变量定义let方式来修补这个bug,它的特性才是模仿正统编程里面变量的定义。而之前的幺蛾子特性,我们还是要说一下。

针对var变量,只要记住下面这句话,统统搞定

变量声明自动提前 + 变量是函数级作用域

    var b = 1
    function outer () {
        var b = 2
        function inner (){
            b++
            var b = 4
            console.log(b)   // 4
        }
        inner()
    }
    outer()

对于这段代码可以做如下分析:

    var b  <=======
    b = 1
    function outer () {
        var b   <=======
        b = 2
        function inner (){
            var b  <=======
            b++
            b = 4
            console.log(b); // 4
        }
        inner()
    }
    outer()
    var global_b

    global_b = 1
    function outer () {
        var outer_b 

        outer_b = 2
        function inner (){
            var inner_b

            inner_b++;
            inner_b = 3;
            console.log(inner_b)
        }
        inner()
    }
    outer()

虽然我是史上最不正经的程序员,但对JavaScript我是认真的,就这样,啾咪~~

上一篇 下一篇

猜你喜欢

热点阅读