js改變範圍鏈

來源:互聯網
上載者:User

標籤:執行環境   全域變數   兩種   try   fun   就會   如何   內建函式   代碼   

js有兩種範圍:全域和局部

在最外層定義的變數擁有全域範圍,對任何內建函式來說,都是可以訪問的;而局部範圍則只有內建函式定義的變數才擁有;在函數內部定義變數時,要使用var,否則定義的變數時全域變數

js是沒有塊級範圍的,因此for迴圈中的i在執行完迴圈後,還可以被同範圍的代碼擷取。js的範圍都是相對於函數而言,是函數範圍。

js的範圍鏈:

每個函數執行都會產生一個執行環境,全域執行環境是最外圍的執行環境且被認為是window對象,因此所有全域變數和函數都會作為window對象的屬性和方法而被建立;當一個函數被調用時,該函數環境的變數對象就會被壓入一個環境棧中。而在函數執行之後,棧將該函數的變數對象彈出,把控制權交給之前的執行環境變數對象

js如何來延長範圍鏈:

有三種語句可以加強範圍鏈:try catch;with;eval

trycatch中的catch和with語句都會在範圍鏈的前端添加一個變數對象。對with語句來說,將指定的對象添加到範圍鏈中,對catch語句來說,會建立一個新的變數對象,其中包含的是被拋出的錯誤對象的聲明,而eval由於可以被賦值給變數,在被賦值的時候會將eval所處的變數範圍也賦值過去,所以可以使得範圍獲得擴充。

eg:

var x=1,evalg=eval;

function a(){

  var x=3;

  eval("alert(x)");//3

  evalg("alert(x)");//1

}

js改變範圍鏈

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.