JavaScript變量做用域

變量的做用域,字面意思來理解就是變量在哪些區域能夠起做用能夠被訪問。函數

JavaScript中能夠認爲:  定義在函數外面的變量,叫作全局變量spa

            定義在函數內部的變量,叫作局部變量code

全局變量,做用域是整個文檔,能夠被文檔內的任意函數訪問調用blog

 例如:ip

        function fn1() { console.log(scope); } var scope = "這是一個全局變量"; function fn2() { console.log(scope); } fn1(); fn2();

打印結果:作用域

 

由於scope是一個全局變量,因此函數 fn1 和 函數 fn2 均可以訪問變量scope文檔

 

局部變量的做用域僅在定義它的函數中io

例如:console

        function fn(){ var scope="這是一個局部變量"; console.log("函數內調用:"+scope); } fn(); console.log("函數外調用:"+scope);

執行結果:function

 

 scope的做用域是函數fn  因此函數外調用就會會報錯

 外面調用不到的主要緣由是由於局部變量的做用範圍僅在函數中,當函數執行完成後a就會自動被銷燬

 

 假如咱們定定義了一個全局變量後,又在函數中定義了一個同名的局部變量,這時候會發生什麼呢?

        var scope = "這是一個全局變量"; function fn(){ console.log(scope); var scope="這是一個局部變量"; console.log(scope); } fn(); console.log(scope);

 

咱們先在函數外先執行fn 而後再打印scope

這是咱們看到的執行結果是這樣的:

 

 執行fn時,第一次打印scope時,局部變量還未定義,打印的是undefined,而不是全局變量。

咱們能夠這樣認爲:一旦在函數中定義了局部變量,那麼這個局部變量名字若是和全局變量名相同,那麼這個同名的全局變量將沒法直接在函數中使用了,在函數內部局部變量的優先級高於全局變量。

 

JavaScript 容許在定義變量時不使用關鍵字var。不管是在函數內部仍是外部,若是不使用var定義,都會默認爲定義的是一個全局變量

        function fn() { scope = "不使用var定義變量"; } fn(); console.log(scope);

 

 

打印結果爲:

 

 執行過fn以後,就至關於定義了一個全局變量scope

相關文章
相關標籤/搜索