最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

You-Dont-Know-JS詞法作用域及兩種常見的模型學(xué)習(xí)文檔

 更新時間:2023年08月22日 10:18:30   作者:fishenal  
這篇文章主要為大家介紹了JS?詞法作用域及兩種常見的模型詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

Lexical Scope - 詞法作用域

作用域有兩種常見的模型,一種叫做 詞法作用域 Lexical Scope,一種叫做動態(tài)作用域 Dynamic Scope。其中詞法作用域更常見,被大多數(shù)語言采用,包括javascript。

詞法分析

詞法分析過程Lex-time,是指系統(tǒng)講源碼字符串解讀成有含義的token的過程。詞法作用域就是說在詞法分析過程中指派的作用域,詞法作用域在詞法解析過程中就已經(jīng)定死了。

依然有一些手段能在詞法解析之后改變詞法作用域,但這些做法并不推薦。使用關(guān)鍵詞evalwith,會產(chǎn)生性能問題。

考慮如下代碼:

  • 氣泡(作用域) 1 :即全局作用域,包含變量foo
  • 氣泡(作用域) 2 :foo的作用域,包含變量a,bar,b
  • 氣泡(作用域) 3 :bar的作用域,包含變量c

bar 作用域里完整的包含了foo 的作用域, 因?yàn)閎ar 是在foo中定義的,產(chǎn)生嵌套作用域。值得注意的是,一個函數(shù)作用域只有可能存在于一個父級作用域中,不會同時存在兩個父級作用域。

過程

語句console.log尋找變量a,b,c 其中c在自己的作用域中找到,a,b在自己的作用域中找不到,于是向上級作用域中查找,在foo的作用域中找到,并且調(diào)用。作用域向上查找的過程中,匹配第一次查找到的變量,也就是說如果foo的作用域中也定義了c,但bar函數(shù)只調(diào)用自己作用域里的c。

作用域的查找一直會找到全局作用域的全局對象,比如瀏覽器中的window,你可以定義window.a來確保變量a可以被獲取。

詞法作用域向上查找只查找第一級變量,比如變量foo.bar.baz, 查找的是對象foo,查找到了再從對象里獲取bar以及baz,查找本身與bar,baz無關(guān)。

動態(tài)作用域 Dynamic Scope

動態(tài)作用域,javascript并無采用,但是與js的 this機(jī)制非常相似,看如下代碼:
動態(tài)作用域是在代碼運(yùn)行時定義的,而非代碼解析時。

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

bar調(diào)用,bar里面foo被調(diào)用,foo函數(shù)需要查找變量a,由于javascript采用詞法作用域,foo被解析的時候是在全局作用域,所以a是全局作用域中的2,而非bar里面的a。假設(shè)js采用的是動態(tài)作用域,foo是在bar中被調(diào)用的,所以a查找到了bar作用域里的3。

作為對照,動態(tài)作用域不關(guān)心它本身是怎樣在哪里聲明的,只關(guān)心它在哪里調(diào)用的,動態(tài)作用域的域鏈基于調(diào)用棧,而不是代碼中的嵌套關(guān)系。

相反,詞法作用域關(guān)心的是函數(shù)在哪里聲明的,動態(tài)作用域的概念和js中的this相同,this也關(guān)心函數(shù)在哪里調(diào)用的。

以上就是JS 詞法作用域及兩種常見的模型詳解的詳細(xì)內(nèi)容,更多關(guān)于JS 詞法作用域模型的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 微信小程序 使用騰訊地圖SDK詳解及實(shí)現(xiàn)步驟

    微信小程序 使用騰訊地圖SDK詳解及實(shí)現(xiàn)步驟

    這篇文章主要介紹了微信小程序 使用騰訊地圖SDK詳解及實(shí)現(xiàn)步驟的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • 3分鐘精通高階前端隨手寫TS插件

    3分鐘精通高階前端隨手寫TS插件

    這篇文章主要為大家介紹了3分鐘精通高階前端隨手寫TS插件的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 微信小程序 LOL 英雄介紹開發(fā)實(shí)例

    微信小程序 LOL 英雄介紹開發(fā)實(shí)例

    這篇文章主要介紹了微信小程序 LOL 英雄介紹開發(fā)的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • 不可變數(shù)據(jù)方案之immer.js原理解析

    不可變數(shù)據(jù)方案之immer.js原理解析

    這篇文章主要為大家介紹了不可變數(shù)據(jù)方案之immer.js原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • JS前端使用canvas實(shí)現(xiàn)物體的點(diǎn)選示例

    JS前端使用canvas實(shí)現(xiàn)物體的點(diǎn)選示例

    這篇文章主要為大家介紹了JS前端使用canvas實(shí)現(xiàn)物體的點(diǎn)選示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • 淺談TypeScript 索引簽名的理解

    淺談TypeScript 索引簽名的理解

    這篇文章主要給大家分享的是TypeScript 索引簽名的理解,索引簽名由方括號中的索引名稱及其類型組成,后面是冒號和值類型:{ [indexName: KeyType]: ValueType }, KeyType 可以是一個 string、number 或 symbol,而ValueType 可以是任何類型,下面就倆簡單了解一下吧
    2021-10-10
  • JavaScript的模塊化開發(fā)框架Sea.js上手指南

    JavaScript的模塊化開發(fā)框架Sea.js上手指南

    Sea.js的目的是追求簡單的代碼書寫和組織方式,Sea.js并沒有過多功能而是主要對前端程序的部署結(jié)構(gòu)作出約束,下面我們就來看一下JavaScript的模塊化開發(fā)框架Sea.js上手指南:
    2016-05-05
  • js作用域及作用域鏈工作引擎

    js作用域及作用域鏈工作引擎

    這篇文章主要為大家介紹了js作用域及作用域鏈工作引擎,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • 微信小程序template模板實(shí)例詳解

    微信小程序template模板實(shí)例詳解

    這篇文章主要介紹了微信小程序template模板使用的相關(guān)資料,希望通過本文能幫助到大家,讓大家理解掌握這樣的功能,需要的朋友可以參考下
    2017-10-10
  • 微信小程序之前臺循環(huán)數(shù)據(jù)綁定

    微信小程序之前臺循環(huán)數(shù)據(jù)綁定

    這篇文章主要介紹了微信小程序之前臺循環(huán)數(shù)據(jù)綁定的相關(guān)資料,這里提供實(shí)例幫助大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下
    2017-08-08

最新評論

抚顺市| 鄂伦春自治旗| 从化市| 安多县| 广宁县| 平塘县| 滁州市| 淅川县| 兰州市| 柳州市| 泾源县| 右玉县| 平度市| 庄浪县| 永吉县| 华亭县| 桂阳县| 清新县| 高陵县| 封丘县| 阿巴嘎旗| 湛江市| 金山区| 沿河| 襄樊市| 马山县| 平和县| 乐清市| 达尔| 繁峙县| 灌阳县| 宁陵县| 土默特左旗| 鹤庆县| 鸡泽县| 平遥县| 孙吴县| 资中县| 阿图什市| 高碑店市| 晋宁县|