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

資訊專欄INFORMATION COLUMN

javascript 詞法作用域

mtunique / 721人閱讀

摘要:詞法作用域定義在詞法階段的作用域,開始時(shí),編譯器做語法分析的時(shí)候,確認(rèn)里各個(gè)詞法所在的作用域。例如等函數(shù)可以理解為在當(dāng)前作用域插入一段代碼。擴(kuò)展一個(gè)語句的作用域鏈。

詞法作用域
定義在詞法階段的作用域,開始時(shí),編譯器做語法分析的時(shí)候,確認(rèn)js里各個(gè)詞法所在的作用域。

js里只有全局作用域和函數(shù)作用域,這里簡單介紹下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函數(shù)里,在console.log(a),對a進(jìn)行RHS查詢,發(fā)現(xiàn)在當(dāng)前作用域存在變量a,如果foo里沒有a就往上一層(全局)去查找
2、在foo函數(shù)里,在console.log(b),對b進(jìn)行RHS查詢,發(fā)現(xiàn)在當(dāng)前作用域不存在變量b,然后往上一層(全局)去查找b,發(fā)現(xiàn)存在變量b,獲取b的值。

在詞法分析階段,會(huì)確認(rèn)在全局作用域里有a,b這兩個(gè)變量,函數(shù)foo作用域里有a這個(gè)變量

但是,有些方法可以欺騙或者動(dòng)態(tài)生成作用域。

例如:eval、setTimeout、with等

eval

eval函數(shù)可以理解為在當(dāng)前作用域插入一段代碼。

如下:

        var b = 2;

        function foo() {

            eval("var b=1")

            console.log(b); //1
        }

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

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

setTimeout

定時(shí)器函數(shù)是一個(gè)異步函數(shù),第一個(gè)參數(shù)中字符串的執(zhí)行作用域是全局作用域,類似上面動(dòng)態(tài)插入變量。

        var b = 1;

        function foo() {

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

with

擴(kuò)展一個(gè)語句的作用域鏈。

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

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/93447.html

相關(guān)文章

  • 還擔(dān)心面試官問閉包?

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

    tinyq 評論0 收藏0
  • JavaScript深入之詞法作用和動(dòng)態(tài)作用

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

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

    摘要:詞法作用域定義在詞法階段的作用域由你在寫代碼時(shí)將變量和塊作用域?qū)懺谀膩頉Q定的,因此當(dāng)詞法分析器處理代碼時(shí)會(huì)保持作用域不變。欺騙詞法作用域在詞法分析器處理過后依然可以修改作用域。 你不知道的JS(上卷)筆記 你不知道的 JavaScript JavaScript 既是一門充滿吸引力、簡單易用的語言,又是一門具有許多復(fù)雜微妙技術(shù)的語言,即使是經(jīng)驗(yàn)豐富的 JavaScript 開發(fā)者,如果沒...

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

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

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

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

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

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

    banana_pi 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<