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

老生常談的Javascript作用域問題

開發 前端
在前端學習中,作用域這個問題一直被廣泛提起,什么是作用域,什么又是作用域鏈?在Javascript中,怎么去理解這些概念都是學好這門語言的關鍵,所以在學習前端開發的過程中,我需要也很有必要去學習和總結下javascript----作用域。

在前端學習中,作用域這個問題一直被廣泛提起,什么是作用域,什么又是作用域鏈?在Javascript中,怎么去理解這些概念都是學好這門語言的關鍵,所以在學習前端開發的過程中,我需要也很有必要去學習和總結下javascript----作用域。

[[141413]]

作用域并不難,但是去很少有人能稍微深入的解釋什么是作用域,知其然而不知其所以然顯然是遠遠不夠的,所以我們就深入淺出一下,

本片博文旨在深度去分析作用域,如有總結不到位之處,請讀者海涵并在評論區指出。

談到作用域就不得不談到一個名詞----執行環境。什么叫執行環境呢?

執行環境是Javascript中最為重要的一個概念,它定義了變量或函數有權訪問其他數據,決定了他們各自的行為。那么在每個執行環境中都有一個叫做“變量對象”的object,執行環境中的所有變量和函數都保存在這個對象中,這個object是無法被訪問到了,它只能在后臺被javascript解釋器訪問到。

瀏覽器在解析Javascript代碼的時候會為每個函數創建一個執行環境,并在該執行環境中生成一個變量對象來存儲變量和其內部的函數。我們常常用到的window就是最外圍的執行環境,也叫全局執行環境,每個執行環境的代碼執行完成之后,該環境被銷毀,其中的變量對象也將被銷毀,而全局執行環境只會在瀏覽器或網頁關閉的時候被銷毀,其他的執行環境(或者內部的)則為局部執行環境(函數)。

每個函數都有自己的執行環境,那么當代碼的執行流進入到一個函數時,會將該執行環境推入到一個環境棧中,在函數執行完成之后又將其彈出,把對這個執行環境的控制權交還給之前的執行環境,當代碼在一個執行環境中執行的時候,會將該環境中的變量對象連入到作用域鏈中。作用域鏈的作用就是保證對執行環境中的有權訪問的變量和函數有序的訪問。說到這里,大家可能有些迷糊啦,那么就用點代碼和圖片來解釋下吧。

 

  1. //window scope 
  2.  
  3. var name0 = 'scope0'<p>console.log(name0)  //這里可以訪問到name0 
  4.  
  5. function scope1(){<p> 
  6.  
  7.     var name1 = 'scope1'<p>     console.log(name0,name1)  //這里可以訪問到name0,name1 
  8.  
  9.     function scope2(){ 
  10.  
  11.         var name2 = 'scope2'<p>         console.log(name0,name1,name2) //這里可以訪問到name0,name1,name2  
  12.  
  13.         function scope3(){ 
  14.  
  15.             var name3 = 'scope3'<p>              console.log(name0,name1,name2,name3) //這里可以訪問到name0,name1,name2,name3 
  16.  
  17.         } 
  18.  
  19.     } 
  20.  

 

當JS解釋器去執行這段代碼的時候,會生成4個執行環境,分別是window,scope1,scope2,scope3。然后再執行JS代碼的時候,會把每個執行環境推入到執行棧中,并生成變量對象給連接到作用域鏈中(從上到下),***生成的作用域鏈就為:

window→scope1→scope2→scope3

對于每個執行環境中的變量對象來說,它的作用域鏈就是它本生加上它之前的變量對象(例如scope2的作用域鏈就是scope2和它之前的 scope1和window)。我們先前說道,每個執行環境中的變量對象就是該執行環境能夠訪問到了變量和函數,個人理解為這個函數就是變量對象的作用域 鏈上其他的變量對象,那么就很好理解了,我們分析下上面代碼scope2的變量對象上有哪些東西,首先是參數數組(arguments,這里為[])還有 name2變量,然后是scope1的變量對象和全局變量對象。

說了這么多,提了那么多概念和名詞,我們好像只是說到了作用域鏈,但是并沒有說到作用域,這不是扯淡嘛!!!!好吧,我們現在就來談談作用域。

還是先來扯下概念吧。是每個執行環境可以通過作用域鏈向上訪問這個他的作用域鏈的其他執行環境,但是不能向下訪問。這個就是作用域啦。。。

還是拿scope2函數來說吧,他可以訪問name2,name1,name0但是不能訪問name3,這個就是作用域的限定,他只能訪問到 scope1和window的執行環境(還有它本身)。額,就這么一小段,我自己都醉了,但是個人覺得作用域就這點東西,關鍵的是在與對執行環境、變量對 象和作用域鏈的理解。這些才是扎實的理解Javascript作用域的關鍵。

其實說到這里我感覺已經差不多了,***次寫那么長的博文,文章水準還有待提高,這篇文章主要是我在看《javascript高級程序設計》的看 到作用域這小節,感覺作者寫了太好了,于是乎加上了一些個人的理解就寫了這篇博客。非常希望有對WEB開發有深刻理解的大大們提出批評和見解。

 
責任編輯:王雪燕 來源: 博客園
相關推薦

2015-06-25 10:46:23

數據中心節能

2012-02-13 09:46:56

數據中心耗能服務器虛擬化

2015-04-08 11:50:07

數據加密數據泄露

2022-03-08 15:01:48

負載均衡IP服務器

2014-07-25 13:34:08

2010-07-28 09:09:55

SQL

2011-08-18 14:47:06

2014-08-21 10:25:44

網絡安全兒童賬戶Google

2019-08-22 17:19:19

javascript去重數組

2010-03-29 09:04:51

VB.NET

2024-01-02 09:42:17

C#開發Windows消息循環機制

2017-04-11 13:54:49

HTTPURLHTML

2021-04-12 09:36:25

Redis擊穿穿透

2021-04-12 09:58:46

Redis數據庫代碼

2010-01-28 13:55:45

三層交換機

2020-01-14 10:37:38

存儲DateTime數值

2025-05-06 00:51:00

2022-06-02 15:19:31

架構智能強化學習

2021-03-09 08:50:58

JavaScript前端作用域

2018-11-14 19:30:57

前端Javascript性能優化
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美性生活一区二区三区 | 亚洲国产一区二区三区 | 97精品超碰一区二区三区 | 成人精品一区二区三区四区 | 综合久久综合久久 | 91久久久久久久久久久 | 久久com| 一级做a毛片| 久久久国产网站 | 亚洲国产欧美精品 | 日韩成人精品一区二区三区 | 国产精品一区二区久久 | 永久看片 | 丁香婷婷成人 | 二区精品| 欧美精品乱码久久久久久按摩 | 久久久久国产精品午夜一区 | 亚洲精品9999久久久久 | 一区二区三区回区在观看免费视频 | 午夜精品久久久久久久久久久久久 | 久久精品国产一区二区电影 | 国产精品久久久久久久久久妞妞 | 欧美激情综合色综合啪啪五月 | 风间由美一区二区三区在线观看 | 成人在线黄色 | 亚洲精品一区二区在线观看 | xxxxxx国产 | 午夜激情免费视频 | 日韩毛片 | 国产成人99久久亚洲综合精品 | 欧美成人一区二区三区 | 成人国产精品久久 | 中文字幕在线观看国产 | 成年人免费网站 | 日韩中文在线 | 一区二区三区免费 | 自拍视频网站 | 久久国产精品72免费观看 | 欧美三级成人理伦 | 亚洲一区二区三区免费视频 | 久久av一区|