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

首頁 > 編程 > JavaScript > 正文

淺析JavaScript中作用域和作用域鏈

2019-11-19 18:39:20
字體:
來源:轉載
供稿:網友

學習js,肯定要學習作用域,js作用域和其他的主流語言的作用域還存在很大的區別。

一.js沒有塊級作用域。

 js沒有塊級作用域,就像這樣:

if(){ var a = 100;   console.log(a) //輸出100}console.log(a) //輸出100

 js中像if,for,switch之類的語句,他們包含的代碼塊里面的變量,在代碼塊外面也能被讀取,所以說,js沒有塊級作用域。

二.js的全局變量

 js中規定,全局變量都可以看作是window的屬性,而且全局變量能夠被所有的代碼塊讀取。

var a = 10;function() {  b = 20;  console.log(a); //輸出10;}console.log(b); //輸出20;

 雖然在匿名函數中對a沒有定義,但是由于a是全局變量,所以其他任何的代碼塊都能夠讀取a的值。在一個復雜的項目中,全局變量如果操作不慎,很有可能帶來重大的bug。所以在平時寫代碼的時候,應該盡量避免使用全局變量!對于一個變量來說,如果沒有用var來聲明的話,那么會自動認為是全局變量,因此,在書寫中,一定不能漏寫var。

三.js的局部變量

 js中的全局變量,很容易使代碼存在問題,所以我們應該明確區分全局變量和局部變量!局部變量只在他所在的函數內部讀取,在函數外部卻無法讀取這個變量。

function doSomething(){ var blogName="智軒資本"; function innerSay(){  alert(blogName); } innerSay();}alert(blogName); //undefinedinnerSay(); //undefined

四.js的作用域鏈問題

 由于js存在全局變量和局部變量,在調用一個變量是,會對他的作用域鏈進行查找,如果函數內部定義了這個變量,那么取該變量的值,如果沒有,那么向上一層查找,如果找到了,就獲取這個值,如果還沒找到,繼續往上層查找,直到找到位置,如果找到最后也沒找到,那么該變量的值為undefined。

 先看一個例子:

var myName = '智軒資本';function scoap() {  console.log(myName);    var myName = "zhixuan";    console.log(myName);    console.log(age); } scoap();

先分析一下這個例子,scoap()將調用這個函數,第一個console.log(name),會對name的值進行原型鏈查找,首先看函數scoap內部是否進行了定義,發現在函數內部對name進行了定義,那么第一個console.log(name)將不再往上層查找!那么第一個console.log(name)的值是不是就是“zhixuan”了呢?no!no!no!由于第一個console.log(name)時,對name還沒有賦值,所以,第一個console.log(name)為undefined,第二個console.log(name)為“zhixuan”!

再看一個例子:

var a = 10;function zhixuan() { console.log(a);}function ziben() { var a = 20; zhixuan();}ziben();

這次console.log(a)的值為多少呢?首先執行ziben()函數,里面定義了a為20,再執行zhixuan()函數,要求輸出a的值,由于作用域在函數定義的那一瞬間就決定了,所以,zhixuan()函數會向上查找到a的全局變量,即var a=10,而不是演著ziben()里的作用域查找!所以console.log(a)為10.

當然,我的這些理解比較淺,如果想要繼續深入,推薦閱讀://www.survivalescaperooms.com/article/57393.htm

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,同時也希望多多支持武林網!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 九龙城区| 西充县| 德安县| 太仓市| 罗甸县| 长春市| 嘉善县| 南溪县| 伊金霍洛旗| 浏阳市| 盐津县| 突泉县| 闵行区| 莆田市| 宁国市| 土默特左旗| 祁阳县| 吉安市| 绥化市| 稷山县| 龙口市| 九龙坡区| 北海市| 海盐县| 广州市| 手机| 宿州市| 邓州市| 昌江| 阿拉尔市| 宜丰县| 广昌县| 温宿县| 平凉市| 册亨县| 依安县| 全州县| 洛浦县| 凤阳县| 凤阳县| 衡东县|