天天看點

變量的提升

<script>
        var name = 'World';//全局變量
         (function(){//匿名函數,自我執行
            if(typeof name === 'undefined'){
                var name = "Jack";
                console.info('Goodbye '+ name);
            }else{
                console.info('Hello ' + name);
            }
         })  ();
    </script>
           

運作的結果是

變量的提升

為什麼是Goodbye Jack呢?而不是Hello World呢。

看下面代碼

var name = 'World';
         (function(){
            var name;
            if(typeof name === 'undefined'){
                //var name = "Jack";
                name="Jack";
                console.info('Goodbye '+ name);
            }else{
                console.info('Hello ' + name);
            }
         })  ();
           

把var name=” Jack “;拆分開了看就知道為什麼了。

javaScript是弱類型語言, 在代碼編譯的時候會優先執行 function函數聲明 和 帶有var關鍵字的變量聲明 。

在if()判斷語句執行前,已經編譯了 var name;

代碼在執行到判斷語句的時候 還沒有給name指派,變量聲明未指派就是 undefined。

是以結果就是 Goodbye Jack.

總結:

看代碼的時候注意觀察變量提升。

繼續閱讀