欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript作用域深度剖析之動態(tài)作用域

 更新時間:2023年05月23日 10:13:48   作者:控心crazy  
這篇文章主要為大家介紹了?JavaScript作用域學習之動態(tài)作用域深度剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

前言

在之前的文章中, 我們說了作用域一共分為兩種:詞法作用域和動態(tài)作用域,而這篇文章我們一起來學習 動態(tài)作用域。

動態(tài)作用域

  • 動態(tài)作用域似乎有著很好的理由讓作用域作為一個在運行時就被動態(tài)確定的形式,而不是在寫代碼時進行靜態(tài)確定的形式。

考慮一下代碼:

function foo() {
console.log(a); // 2
}
function bar() {
var a = 3;
foo();
}
var a = 2;
bar();
  • 在上述代碼中,詞法作用域讓 foo() 中的 a 通過 RHS 引用到了全局作用域中的 a, 因此輸出 2;
  • 在動態(tài)作用域中,它并不關心函數和作用域是如何聲明以及在何處聲明的,只關心他們從何處調用的。換句話說,作用域鏈是基于調用棧的,而不是代碼中的作用域嵌套的。
  • 如果 JavaScript 具有動態(tài)作用域,理論上,上述代碼 foo() 中的 a 輸出 3; 因為 foo() 是在 bar() 中調用的,

為什么會這樣?

  • 因為當 foo() 無法找到 a 的變量引用是,會順著調用棧在調用 foo() 的地方查找 a,而不是在嵌套的詞法作用域鏈中向上查找。由于 foo() 是在 bar() 中調用的,引擎會檢查 bar() 的作用域,并找到值為 3 的變量 a。
  • 是不是很奇怪?

    • 但這其實是因為你可能只寫過基于詞法作用域的代碼,因此對動態(tài)作用域感到陌生。如果你只用基于動態(tài)作用域的語言寫過代碼,就會覺得很自然的,而詞法作用域看上去才怪怪的。
  • 事實上 JavaScript 并不具有動態(tài)作用域,它只有詞法作用域。但 this 機制的存在在某種程度上很像動態(tài)作用域。

詞法作用域與動態(tài)作用域的區(qū)別?

  • 動態(tài)作用域其實是 JavaScript 另一個重要機制 this 的表親
  • 詞法作用域是在書寫代碼或定義時確定的
  • 動態(tài)作用域是在運行時確定的。(this 也是)
  • 詞法作用域關注函數在何處聲明
  • 動態(tài)作用域關注函數從何處調用
  • 其實在 JavaScript 中的作用域大多為詞法作用域。
  • 作用域鏈是基于調用棧的,而不是代碼中的作用域嵌套的

特殊字符描述:

  • 問題標注 Q:(question)
  • 答案標注 R:(result)
  • 注意事項標準:A:(attention matters)
  • 詳情描述標注:D:(detail info)
  • 總結標注:S:(summary)
  • 分析標注:Ana:(analysis)
  • 提示標注:T:(tips)

以上就是 JavaScript作用域深度剖析之動態(tài)作用域的詳細內容,更多關于JavaScript動態(tài)作用域的資料請關注腳本之家其它相關文章!

相關文章

  • JS實現字體選色板實例代碼

    JS實現字體選色板實例代碼

    這篇文章主要介紹了JS實現字體選色板實例代碼,有需要的朋友可以參考一下
    2013-11-11
  • HTML+JavaScript實現掃雷小游戲

    HTML+JavaScript實現掃雷小游戲

    這篇文章主要為大家詳細介紹了HTML+JavaScript實現掃雷小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • js實現點小圖看大圖效果的思路及示例代碼

    js實現點小圖看大圖效果的思路及示例代碼

    點小圖看大圖的效果想必很多的朋友都有見到過吧,下面有個不錯的示例,感興趣的朋友可以參考下
    2013-10-10
  • JS實現鼠標點擊箭頭旋轉180度功能

    JS實現鼠標點擊箭頭旋轉180度功能

    這篇文章主要介紹了JS實現鼠標點擊箭頭旋轉180度的效果,通過點擊三角按鈕旋轉180度,本文通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2024-02-02
  • 適用于javascript開發(fā)者的Processing.js入門教程

    適用于javascript開發(fā)者的Processing.js入門教程

    這篇文章主要介紹了適用于javascript開發(fā)者的Processing.js入門教程,感興趣的小伙伴們可以參考一下
    2016-02-02
  • js實現背景圖自適應窗口大小

    js實現背景圖自適應窗口大小

    本文分享了背景圖自適應窗口大小的實例代碼,具有一定的參考作用。下面跟著小編一起來看下吧
    2017-01-01
  • javascript中call,apply,bind函數用法示例

    javascript中call,apply,bind函數用法示例

    這篇文章主要介紹了javascript中call,apply,bind函數用法,結合實例形式分析了call,apply,bind函數的功能、使用方法與相關注意事項,需要的朋友可以參考下
    2016-12-12
  • JS實現對JSON數據進行冒泡排序

    JS實現對JSON數據進行冒泡排序

    JavaScript 是一種廣泛使用的腳本語言,JSON是一種常見的數據格式,這篇文章主要來探討一下如何使用 JavaScript 對 JSON 數據進行冒泡排序,感興趣的可以了解一下
    2023-06-06
  • JavaScript彈窗基礎篇

    JavaScript彈窗基礎篇

    這篇文章主要介紹了JavaScript彈窗基礎篇的相關資料,需要的朋友可以參考下
    2016-04-04
  • Math.js解決js中小數精度丟失問題

    Math.js解決js中小數精度丟失問題

    在JavaScript中進行小數運算時,會容易出現精度丟失的問題,例如在進行兩個小數相加時,結果并不是預期的精確值,而是一個近似值,,使用第三方庫Math.js可以避免精度丟失的問題,本文導入Math.js庫和使用Math.js的方法來進行小數運算,同時還可以指定格式來保留小數位數
    2023-12-12

最新評論