作用域與公司

今天,我們來聊聊作用域!

為什么

因?yàn)閷W(xué)習(xí)Javascript,這是最基本的概念之一,是構(gòu)造我們Javascript知識(shí)樹的一根大樹干。
當(dāng)然還有許多其它大樹干,比如原型鏈,這個(gè)以后再聊。

從哪里聊起

當(dāng)然是從概念開始。
首先我們知道,絕大多數(shù)流行的開發(fā)語言都是由外國人發(fā)明的,而使用的語言里英語又占了絕大多數(shù)。所以像作用域這樣的概念毫無疑問也是由英語翻譯過來的。
第一次接觸到作用域這個(gè)概念感覺好高端:“這個(gè)是什么玩意,怎么個(gè)玩法”?
結(jié)果查了一下洋文:

image.png

原來作用域的洋文就是scope,作用域的概念我不懂,但是scope這個(gè)單詞的中文翻譯我還是知道的,就是范圍的意思!
以上洋文的大概意思是:

  1. Javascript中有全局作用域局部作用域
  2. 每個(gè)函數(shù)會(huì)創(chuàng)造一個(gè)新的作用域
  3. 作用域決定了變量的可訪問性
  4. 函數(shù)內(nèi)部的變量不能被外部的函數(shù)訪問

與現(xiàn)實(shí)的聯(lián)系

我想起一句話:藝術(shù)源于生活而高于生活!
Javascript作用域的特點(diǎn)也一樣可以借鑒于現(xiàn)實(shí)生活,比如說公司
如果把Javascript當(dāng)成公司,那么:

  1. Javascript中有全局作用域和局部作用域
    相當(dāng)于:在公司在里大部門和小部門,這個(gè)非常好理解,因?yàn)樵诂F(xiàn)實(shí)中就是這樣的
  2. 每個(gè)函數(shù)會(huì)創(chuàng)造一個(gè)新的作用域
    相當(dāng)于:每個(gè)部門都有自己的職責(zé)
  3. 作用域決定了變量的可訪問性
    相當(dāng)于:部門決定了其員工的工作范圍
  4. 函數(shù)內(nèi)部的變量不能變外部的函數(shù)訪問
    相當(dāng)于:部門內(nèi)部的員工不能被同級(jí)/上級(jí)部門使用
    這么大白話翻譯過來一下子就好懂很多了!

作用域鏈

與現(xiàn)實(shí)聯(lián)系起來來理解作用域鏈那就簡單多了,比如A部門是掛在B部門下的,B部門是掛在C部門下的,C部門是掛在D部門下,這樣可以一直往上追溯到公司的最高層,這種層級(jí)就像一條鏈子,在Javascript中叫做作用域鏈
大概就是長這樣的:

function A部門(){
    var 員工1;
    var 員工2;
    function B1部門(){
        var 員工1;
        var 員工2;
        function C部門(){
            var 員工1;
        }
    }
    function B2部門(){
        var 員工1;
        var 員工2;
        function C部門(){
            var 員工1;
        }
    }
}

注意

現(xiàn)實(shí)生活有時(shí)候是很靈活的,比如A部門臨時(shí)調(diào)了同級(jí)B部門的某同事來幫忙,或者A部門調(diào)用其子部門的某同事來幫忙這些都是理所當(dāng)然的事。
但是在代碼的世界,有時(shí)就沒有那么靈活,畢竟生活不嚴(yán)格等于代碼,差異性是存在的,求同存異也是一種態(tài)度!
那么在javascript世界里:

  1. 同級(jí)部門的員工不能互相調(diào)用,這是規(guī)定!
  2. 上級(jí)部門不能調(diào)用下級(jí)部門的員工,這也是規(guī)定!
  3. 下級(jí)部門可以調(diào)用上級(jí)部門里的員工,這也是規(guī)定!
function 最頂級(jí)部門(){
    var 張三; 
    //?最頂級(jí)部門不能調(diào)用下級(jí)A部門里李四
    //?最頂級(jí)部門不能調(diào)用下級(jí)B部門里王五

    function A部門(){
        var 李四;
        //A部門里不能調(diào)用同級(jí)部門里的 王五
        //A部門里可以調(diào)用上級(jí)部門里的 張三
    }
    function B部門(){
        var 王五;
        //B部門里不能調(diào)用同級(jí)部門里的 李四
        //B部門里可以調(diào)用上級(jí)部門里的 張三
        
    }
}

完!

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

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