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

資訊專欄INFORMATION COLUMN

[JS]《你不知道的Javascript·上》——函數(shù)作用域和塊作用域

changfeng1050 / 823人閱讀

摘要:提供了同時(shí)解決這兩個(gè)問題的方案以上這種模式稱為立即執(zhí)行函數(shù)表達(dá)式。塊作用域不應(yīng)該完全作為函數(shù)作用域的替代方案,兩種功能應(yīng)該同時(shí)存在。

函數(shù)作用域

為了隱藏內(nèi)部實(shí)現(xiàn),可以通過在任意代碼片段外部添加包裝函數(shù),但是這并不理想,因?yàn)楸仨毬暶饕粋€(gè)具名函數(shù),意味著這個(gè)函數(shù)名稱本身會(huì)污染函數(shù)所在的作用域;同時(shí)必須通過顯式地調(diào)用函數(shù)才能運(yùn)行其中的代碼。

*:區(qū)分函數(shù)聲明和表達(dá)式最簡單的方法是看function關(guān)鍵字出現(xiàn)在聲明中的位置。如果function是聲明中的第一個(gè)詞,那么就是一個(gè)函數(shù)聲明,否則就是一個(gè)函數(shù)表達(dá)式。

JS提供了同時(shí)解決這兩個(gè)問題的方案:

var a=2;
(function foo(){
    var a=3;
    console.log(a);//3
})();

console.log(a);//2

以上這種模式稱為立即執(zhí)行函數(shù)表達(dá)式(IIFE)。

有一個(gè)改進(jìn)的形式:

var a=2;
(function foo(){
    var a=3;
    console.log(a);//3
}());//調(diào)用的括號包含在用來包裝的()里

console.log(a);//2

兩種形式在功能上是一致的。

IIFE有一個(gè)進(jìn)階用法:把它們當(dāng)作函數(shù)調(diào)用并傳遞參數(shù)進(jìn)去。

var a=2;
(function IIFE(global){
    var a=3;
    console.log(a);//3
    console.log(global.a);//2
})(window);

console.log(a);//2

IIFE還有一種變化的用途是倒置代碼的運(yùn)行順序,將需要運(yùn)行的函數(shù)放在第二位。

var a=2;
(function IIFE(def){
    def(window);
})(funtion def(global){
    var a=3;
    console.log(a);//3
    console.log(global.a);//2
})
塊作用域 let

只要聲明是有效的,在聲明中的任意位置都可以使用{...}括號來為let創(chuàng)建一個(gè)用于綁定的塊。

var foo=true;
if(foo){
    {//顯式的塊
        let bar=foo*2;
        console.log(bar);//2
    }
     console.log(bar);//ReferenceError
}
console.log(bar);//ReferenceError

**:let循環(huán):for的循環(huán)頭部使用let,不僅將i綁定到for的塊中,事實(shí)上它將其重新綁定到了循環(huán)的每個(gè)迭代中,確保使用上一個(gè)循環(huán)迭代結(jié)束時(shí)的值重新進(jìn)行賦值。

*:塊作用域不應(yīng)該完全作為函數(shù)作用域的替代方案,兩種功能應(yīng)該同時(shí)存在。

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

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

相關(guān)文章

  • [JS]《你不知道Javascript·》——詞法作用閉包

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

    guqiu 評論0 收藏0
  • 重讀你不知道JS () 第一節(jié)三章

    摘要:如果是聲明中的第一個(gè)詞,那么就是一個(gè)函數(shù)聲明,否則就是一個(gè)函數(shù)表達(dá)式。給函數(shù)表達(dá)式指定一個(gè)函數(shù)名可以有效的解決以上問題。始終給函數(shù)表達(dá)式命名是一個(gè)最佳實(shí)踐。也有開發(fā)者干脆關(guān)閉了靜態(tài)檢查工具對重復(fù)變量名的檢查。 你不知道的JS(上卷)筆記 你不知道的 JavaScript JavaScript 既是一門充滿吸引力、簡單易用的語言,又是一門具有許多復(fù)雜微妙技術(shù)的語言,即使是經(jīng)驗(yàn)豐富的 Ja...

    lavor 評論0 收藏0
  • 你不知道 JavaScript 筆記——作用閉包

    摘要:理解作用域在引擎看來是兩個(gè)完全不同的聲明。在循環(huán)中使用閉包閉包是函數(shù)和聲明該函數(shù)的詞法環(huán)境的組合。回到我們上面說的在自己定義的作用域以外的地方執(zhí)行,這里聲明的是全局變量,使用全局變量不構(gòu)成閉包。 第一章:作用域是什么 程序中變量存儲在哪里,需要是怎么找到它,這就需要設(shè)計(jì)一套存儲以及能方便的找到它的規(guī)則,這個(gè)規(guī)則就是作用域 編譯原理 JavaScript 是一門編譯語言,它與傳統(tǒng)編譯語言...

    BearyChat 評論0 收藏0
  • 你應(yīng)該要知道作用閉包

    摘要:寫在前面對于一個(gè)前端開發(fā)者,應(yīng)該沒有不知道作用域的。欺騙詞法作用域有兩個(gè)機(jī)制可以欺騙詞法作用域和。關(guān)于你不知道的的第一部分作用域和閉包已經(jīng)結(jié)束了,但是,更新不會(huì)就此止住未完待續(xù) 這是《你不知道的JavaScript》的第一部分。 本系列持續(xù)更新中,Github 地址請查閱這里。 寫在前面 對于一個(gè)前端開發(fā)者,應(yīng)該沒有不知道作用域的。它是一個(gè)既簡單有復(fù)雜的概念,簡單到每行代碼都有它的影子...

    JouyPub 評論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

發(fā)表評論

0條評論

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