国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

javascript 詞法作用域

mtunique / 725人閱讀

摘要:詞法作用域定義在詞法階段的作用域,開始時,編譯器做語法分析的時候,確認里各個詞法所在的作用域。例如等函數可以理解為在當前作用域插入一段代碼。擴展一個語句的作用域鏈。

詞法作用域
定義在詞法階段的作用域,開始時,編譯器做語法分析的時候,確認js里各個詞法所在的作用域。

js里只有全局作用域和函數作用域,這里簡單介紹下js的作用域。

js作用域

看下面代碼:

        var a = 1;
        var b = 0;

        function foo() {
            var a = 2;
            console.log(a); //2
            console.log(b); //0
        }
        foo();
        console.log(a); //1

1、在foo函數里,在console.log(a),對a進行RHS查詢,發現在當前作用域存在變量a,如果foo里沒有a就往上一層(全局)去查找
2、在foo函數里,在console.log(b),對b進行RHS查詢,發現在當前作用域不存在變量b,然后往上一層(全局)去查找b,發現存在變量b,獲取b的值。

在詞法分析階段,會確認在全局作用域里有a,b這兩個變量,函數foo作用域里有a這個變量

但是,有些方法可以欺騙或者動態生成作用域。

例如:eval、setTimeout、with等

eval

eval函數可以理解為在當前作用域插入一段代碼。

如下:

        var b = 2;

        function foo() {

            eval("var b=1")

            console.log(b); //1
        }

        foo();
        console.log(b); //2

在開始的詞法分析中,foo函數作用域并不存在變量b,然而在引擎執行代碼的時候,到eval函數執行,就強行在foo函數作用域中插入變量b

setTimeout

定時器函數是一個異步函數,第一個參數中字符串的執行作用域是全局作用域,類似上面動態插入變量。

        var b = 1;

        function foo() {

            setTimeout("var b =2", 0);
            setTimeout("console.log(b)", 0); //2
        }
        foo();
        console.log(b); //1

with

擴展一個語句的作用域鏈。

在一個對像是擴展屬性,如果屬性存在就修改屬性值,如果不存在就掛載在全局對象上,類似于在函數里不用var聲明的變量都掛在window對象上。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/93447.html

相關文章

  • 還擔心面試官問閉包?

    摘要:一言以蔽之,閉包,你就得掌握。當函數記住并訪問所在的詞法作用域,閉包就產生了。所以閉包才會得以實現。從技術上講,這就是閉包。執行后,他的內部作用域并不會消失,函數依然保持有作用域的閉包。 網上總結閉包的文章已經爛大街了,不敢說筆者這篇文章多么多么xxx,只是個人理解總結。各位看官瞅瞅就好,大神還希望多多指正。此篇文章總結與《JavaScript忍者秘籍》 《你不知道的JavaScri...

    tinyq 評論0 收藏0
  • JavaScript深入之詞法作用和動態作用

    摘要:作用域作用域是指程序源代碼中定義變量的區域。采用詞法作用域,也就是靜態作用域。而與詞法作用域相對的是動態作用域,函數的作用域是在函數調用的時候才決定的。前面我們已經說了,采用的是靜態作用域,所以這個例子的結果是。 JavaScript深入系列的第二篇,JavaScript采用詞法作用域,什么語言采用了動態作用域?兩者的區別又是什么?還有一個略難的思考題,快來看看吧。 作用域 作用域是指...

    gclove 評論0 收藏0
  • 重讀你不知道的JS (上) 第一節二章

    摘要:詞法作用域定義在詞法階段的作用域由你在寫代碼時將變量和塊作用域寫在哪來決定的,因此當詞法分析器處理代碼時會保持作用域不變。欺騙詞法作用域在詞法分析器處理過后依然可以修改作用域。 你不知道的JS(上卷)筆記 你不知道的 JavaScript JavaScript 既是一門充滿吸引力、簡單易用的語言,又是一門具有許多復雜微妙技術的語言,即使是經驗豐富的 JavaScript 開發者,如果沒...

    baihe 評論0 收藏0
  • 十分鐘快速了解《你不知道的 JavaScript》(上卷)

    摘要:最近剛剛看完了你不知道的上卷,對有了更進一步的了解。你不知道的上卷由兩部分組成,第一部分是作用域和閉包,第二部分是和對象原型。附錄詞法這一章并沒有說明機制,只是介紹了中的箭頭函數引入的行為詞法。第章混合對象類類理論類的機制類的繼承混入。 最近剛剛看完了《你不知道的 JavaScript》上卷,對 JavaScript 有了更進一步的了解。 《你不知道的 JavaScript》上卷由兩部...

    趙春朋 評論0 收藏0
  • [JS]《你不知道的Javascript·上》——詞法作用和閉包

    摘要:吐槽一下,閉包這個詞的翻譯真是有很大的誤解性啊要說閉包,要先說下詞法作用域。閉包兩個作用通過閉包,在外部環境訪問內部環境的變量。閉包使得函數可以繼續訪問定義時的詞法作用域。 閉包是真的讓人頭暈啊,看了很久還是覺得很模糊。只能把目前自己的一些理解先寫下來,這其中必定包含著一些錯誤,待日后有更深刻的理解時再作更改。 吐槽一下,閉包這個詞的翻譯真是有很大的誤解性啊…… 要說閉包,要先說下詞法...

    guqiu 評論0 收藏0
  • 深入理解 Javascript作用

    摘要:作用域是門動態語言,跟不一樣,可以隨意定義全局變量和局部變量,變量會在該作用域下提升,而且沒有塊級作用域。一預處理作用域解析的作用域只用兩種,一個是全局的,一個是函數的,也稱為全局作用域和局部作用域局部作用域可以訪問全局作用域。 作用域 JavaScript是門動態語言,跟Java不一樣,JavaScript可以隨意定義全局變量和局部變量,變量會在該作用域下提升,而且JavaScrip...

    banana_pi 評論0 收藏0

發表評論

0條評論

mtunique

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<