成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

被面試官愛問的作用域與作用域鏈

開發 前端
如果說執行上下文是代碼的執行環境,那么作用域就是執行環境中的一套執行規則,既然是規則,JavaScript 引擎執行代碼時要遵守這套規則,同時開發人員在寫代碼時,同樣也要遵守這套規則。

 

本文轉載自微信公眾號「小鹿動畫學編程」,作者小鹿同學。轉載本文請聯系小鹿動畫學編程公眾號。   

本文繼上篇文章詳細講解的 JavaScript 執行上下文繼續深入作用域與作用域鏈。

一、作用域

如果說執行上下文是代碼的執行環境,那么作用域就是執行環境中的一套執行規則,既然是規則,JavaScript 引擎執行代碼時要遵守這套規則,同時開發人員在寫代碼時,同樣也要遵守這套規則。

1、什么是作用域

我們先來看這樣一個例子:

  1. function foo () { 
  2.   var bar = 'xiaolu' 
  3. foo() 
  4. console.log(bar)  

上述的運行結果很明顯,控制臺會報錯 bar is not defined,我們可以通過這個小例子就可以發現在函數外部訪問函數內部聲明的變量是不可訪問的,這背后的原因就是 JavaScript 作用域存在導致的結果。

2、什么是詞法環境

說到作用域,那什么是作用域?我們先來認識一下這位老朋友詞法環境。

ECMAScript 規范中對詞法環境的描述如下:詞法環境是用來定義基于詞法嵌套結構的 ECMAScript 代碼內的標識符與變量值和函數值之間的關聯關系的一種規范類型。

說的直白一點,詞法環境就是一套規范和規則,它用來規定某些函數和變量的可訪問范圍等,我們也稱詞法環境為「詞法作用域」。

既然詞法作用域是一套約定好的規則,那么詞法作用域的作用范圍是開發人員在寫代碼的時候就已經是確定了的。

當代碼執行的時候, JavaScript 引擎就會根據這套規范通過標識符名稱來查找相對應的變量和函數。

好吧,最后給它做個總結性的定義。

作用域:作用域是一套約定好的規范和規則,它用來規定某些函數和變量的可訪問性等。

二、作用域鏈

作用域我們弄明白了,我們再來看作用域鏈。作用域鏈和作用域卻大不相同,咱們分別從「執行棧層面」和「代碼層面」來體驗一下什么是作用域鏈。

  1. var name = "xiaolu"
  2. function fn () { 
  3.   console.log(name); 
  4.   function getName(){ 
  5.     console.log(name); 
  6.   } 
  7.   getName(); 
  8. fn(); 

執行棧中的作用域鏈示意圖:

圖片

該示意圖為上述代碼的執行情況,在上述示意圖中,不同的色塊縮進形成的可訪問鏈就是我們所說的作用域鏈。

雖然上述示意圖是抽象出來的,如果我們在代碼層面來理解作用域鏈,又是如何實現的呢?

在上一篇中分享到,每當創建一個新的執行上下文時,都會創建一個「變量對象」用于存放當前執行上下文中的變量和函數。(記住:這個變量對象很重要)

如果我們把這些執行上下文的「變量對象」關聯起來,就形成了一條鏈,我們把這條鏈的實現稱為「作用域鏈」。

圖片

上述代碼的執行結果是打印輸出:

1var name = "xiaolu";

2function fn () {

3 console.log(name);

4 function getName(){

5 console.log(name);

6 }

7 getName();

8}

9fn();

當內部的 getName 執行時 JavaScript 引擎就在 getName 作用域內查找變量 name,發現并沒有,就會沿著上圖中的作用域鏈往上層尋找,在 fn 的作用域中也沒有發現 name 變量,然后繼續沿著作用域鏈往上層的尋找,直到全局作用域中,發現存在變量 name,然后輸出 name 的值。

 

責任編輯:武曉燕 來源: 小鹿動畫學編程
相關推薦

2021-03-17 08:39:24

作用域作用域鏈JavaScript

2011-09-06 09:56:24

JavaScript

2019-03-13 08:00:00

JavaScript作用域前端

2021-03-09 08:35:51

JSS作用域前端

2015-11-26 13:11:24

javascript原型鏈作用域

2021-06-02 07:02:42

js作用域函數

2011-05-12 18:26:08

Javascript作用域

2022-05-10 08:47:00

JMeter作用域執行順序

2010-09-29 15:02:23

DHCP作用域

2010-09-25 16:10:09

添加DHCP作用域

2020-08-03 07:04:54

測試面試官應用程序

2022-04-01 12:38:32

cookie代碼面試

2015-08-18 13:42:42

js作用域鏈變量

2021-07-06 07:27:45

React元素屬性

2021-03-09 08:50:58

JavaScript前端作用域

2010-08-25 15:19:20

DHCP作用域

2011-04-18 09:31:35

JavaScript

2021-07-01 11:56:51

JavaScript開發代碼

2021-07-05 08:43:46

Spring Beanscope作用域

2010-08-31 16:29:40

DHCP客戶端
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩国产在线 | 亚洲福利网站 | 久久久资源 | 97国产爽爽爽久久久 | 色婷婷精品国产一区二区三区 | 午夜欧美 | 欧美在线资源 | 亚洲一区二区精品视频 | 国产xxxx搡xxxxx搡麻豆 | 欧美在线观看黄色 | 91看片在线观看 | 久久久国产一区二区三区四区小说 | 日韩一区二区在线视频 | 欧美一级片在线观看 | 99re热精品视频 | 成人国产午夜在线观看 | 91欧美精品成人综合在线观看 | 91影院| 亚洲精品福利在线 | 福利视频二区 | 国产日韩电影 | 国产欧美精品区一区二区三区 | 欧美一级高潮片免费的 | 国产欧美精品一区二区 | 一级欧美一级日韩片免费观看 | 日韩快播电影网 | 瑟瑟免费视频 | 国产精品一区一区三区 | 中文字幕亚洲欧美日韩在线不卡 | 午夜小视频免费观看 | 欧美日本亚洲 | 九九热国产精品视频 | 国产农村妇女毛片精品久久麻豆 | 精品美女 | 国产视频久久 | 激情av免费看 | 91免费电影 | 亚洲人va欧美va人人爽 | 久久久久亚洲 | 在线成人免费视频 | 超碰地址 |