国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

javascript作用域鏈與執行環境詳解

2024-05-06 15:19:22
字體:
來源:轉載
供稿:網友

前言:這是筆者學習之后自己的理解與整理。如果有錯誤或者疑問的地方,請大家指正,我會持續更新!

作用域、作用域鏈、執行環境、執行環境棧以及this的概念在javascript中非常重要,本人經常弄混淆,這里梳理一下;

局部作用域函數內部的區域,全局作用域就是window; 作用域鏈取決于函數被聲明時的位置,解析標識符的時候就先找當前作用域,再向外查找,直到全局,這樣一個順序;和函數在哪里調用無關; 執行環境就是函數可訪問的數據和變量的集合,也就是函數的作用域鏈上的所有數據和變量; 執行環境棧就是根據代碼執行順序,各執行環境按照棧的形式逐層訪問,并且用完了退出來扔掉;如果當前執行環境(存放當前作用域鏈里的數據和變量)找不到變量,那就是找不到了,不會往之前的那個執行環境查找,它和作用域鏈是不同的; this是一個對象,它取決于是誰執行的,誰執行那就是誰;(this的概念還是不太清楚,這里寫的有點萬金油,過兩天再來修正) 

作用域

  JavaScript沒有塊級作用域的概念,只有函數級作用域:變量在聲明它們的函數體及其子函數內是可見的。

  作用域就是變量和函數的可訪問范圍,控制著變量和函數的可見性與生命周期,在JavaScript中變量的作用域有全局作用域和局部作用域。

變量沒有在函數內聲明或者聲明的時候沒有帶var就是全局變量,擁有全局作用域;

 <script type="text/javascript"> function test1(){  a = 1;//全局變量,只有在當前函數運行時,才有效  } test1(); console.log(a);//1 注意test1函數必須運行,不然找不到a </script>

全局變量可以當做window對象的屬性用,他們是一樣的; 

<script type="text/javascript">  var b = 1;//全局變量 console.log(b === window.b);//true 全局變量可以當做window對象的屬性用,他們是一樣的;</script>

window對象的所有屬性擁有全局作用域,在代碼任何地方都可以訪問;

函數內部聲明的變量就是局部變量,只能在函數體內使用,函數的參數雖然沒有使用var但仍然是局部變量。

 <script type="text/javascript">    var c = 1;//全局變量//   console.log(d);//ReferenceError: d is not defined 引用錯誤,當前作用域就是最外層作用域,依然找不到d   function test2(d){    console.log(c);//1 全局變量,哪都可以訪問;(先找當前作用域,找不到,就向外層作用域找,直到window最外層,找到了)    console.log(d);//3 形參是局部變量,只有當前作用域下可以訪問   }   test2(3);  </script>

作用域鏈

  作用域鏈取決于函數被聲明時的位置,解析標識符的時候就先從當前作用域開始找,在當前作用域中無法找到時,引擎就會在外層嵌套的作用域中繼續查找,直到找到該變量,或抵達最外層的作用域(也就是全局作用域)為止;它的路線已經被定死了,和函數在哪里運行無關;

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 郯城县| 根河市| 闵行区| 疏勒县| 景德镇市| 涿鹿县| 德保县| 河曲县| 油尖旺区| 荔浦县| 页游| 伊川县| 娄烦县| 盱眙县| 德庆县| 普兰店市| 碌曲县| 灵台县| 白玉县| 吉林市| 贵阳市| 逊克县| 晋宁县| 大石桥市| 泸西县| 化德县| 菏泽市| 遂溪县| 阆中市| 商南县| 泾川县| 光山县| 红原县| 长丰县| 杭锦后旗| 永平县| 洛川县| 乌拉特中旗| 合作市| 石楼县| 临江市|