JS詞法作用域

作用域就是程序源代碼定義變量的區(qū)域,規(guī)定如何去查找變量,作用域?qū)ψ兞康脑L問權(quán)。

在 js 中詞法作用域規(guī)則:

1.函數(shù)允許訪問函數(shù)外的數(shù)據(jù).

2.整個代碼結(jié)構(gòu)中只有函數(shù)可以限定作用域.

3.作用規(guī)則首先使用提升規(guī)則分析

4.如果當(dāng)前作用規(guī)則中有名字了, 就不考慮外面的名字

因為 JavaScript 采用的是詞法作用域,函數(shù)的作用域在函數(shù)定義的時候就決定了。

例子:


   var value = 1;

          function foo() {

                    console.log(value);

 }

        function bar() {

           var value = 2;

   foo();

}

bar(); //1

瀏覽器執(zhí)行bar函數(shù),里面定義了局部變量value=2,但是沒有操作,接著執(zhí)行foo函數(shù),console查找變量,如果沒有就向上一級查找,也就是value=1,所以會打印1,bar函數(shù)內(nèi)的局部變量沒有被使用到,這個就是js的靜態(tài)作用域(詞法作用域)

再看一個例子《javascript權(quán)威指南》


     var scope= "global scope";

   function checkscope(){ 

                   var scope="local scope";

                function f(){ 

                           return   scope;    

                   }

              return    f();

   }  

checkscope();

不論你在哪個return語句前console.log(scope)都會打印 local scope,原因也很簡單,因為JavaScript采用的是詞法作用域,函數(shù)的作用域基于函數(shù)創(chuàng)建的位置。

而引用《JavaScript權(quán)威指南》的回答就是:JavaScript 函數(shù)的執(zhí)行用到了作用域鏈,這個作用域鏈?zhǔn)窃诤瘮?shù)定義的時候創(chuàng)建的。嵌套的函數(shù) f() 定義在這個作用域鏈里,其中的變量 scope 一定是局部變量,不管何時何地執(zhí)行函數(shù) f(),這種綁定在執(zhí)行 f() 時依然有效。

感謝

https://github.com/mqyqingfeng/Blog/issues/4

http://www.cnblogs.com/jiaozhuo/p/5743106.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容