国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

JavaScript中的變量作用域介紹_javascript技巧

來源:懂視網 責編:小采 時間:2020-11-27 21:31:20
文檔

JavaScript中的變量作用域介紹_javascript技巧

JavaScript中的變量作用域介紹_javascript技巧:對于變量的作用域(scope),C、Java等語言采取的是block scope的方式。與之不同,JavaScript所采取的是function scope的方式 — 變量的作用域僅由所處的function決定,與if、for等邏輯塊無關。比如,以下這個例子展示了JavaScript中與C、J
推薦度:
導讀JavaScript中的變量作用域介紹_javascript技巧:對于變量的作用域(scope),C、Java等語言采取的是block scope的方式。與之不同,JavaScript所采取的是function scope的方式 — 變量的作用域僅由所處的function決定,與if、for等邏輯塊無關。比如,以下這個例子展示了JavaScript中與C、J

對于變量的作用域(scope),C、Java等語言采取的是“block scope”的方式。與之不同,JavaScript所采取的是“function scope”的方式 — 變量的作用域僅由所處的function決定,與if、for等邏輯塊無關。比如,以下這個例子展示了JavaScript中與C、Java等語言不一樣的行為:

代碼如下:
function(){
var s = 42;//s is visible throughout function
if (s > 3) {
var x = "test";//x is visible throughout function
for(var i=0; i<10; i++){
console.log(i);
}
console.log(i);//i is visible throughout function
}
console.log(i);
console.log(x);
}

在C、Java等“block scope”的語言中,if語句、for語句等邏輯塊結束后,在這些邏輯塊內部定義的變量將會被銷毀。JavaScript與之不同,只要一個變量定義在某function內,那么整個function內的所有代碼均可訪問到該變量,即使這些代碼在變量定義之前:

代碼如下:
function(){
console.log(a);//undefined
var a = "test";
console.log(a);//test
}

在上述例子中,如果function中a從未被定義,那么console.log(a)將拋出ReferenceError。當function中對a進行定義后,即使這個定義在a變量調用語句之后,對a的調用也屬于合法操作(如果對a變量的定義發生在調用語句之后,那么調用語句中a變量的值為undefined)。事實上,在function內用var關鍵詞進行定義的所有變量,其定義操作都會被提至function的開頭(賦值操作依然留在var定義的那一行),這在JavaScript中稱之為hoisting。比如,上述代碼就等價于:

代碼如下:
function(){
var a;
console.log(a);//undefined
a = "test";
console.log(a);//test
}

變量的作用域鏈

聯系JavaScript中變量的儲存,可以很好的理解JS中的“function scope”與hoisting。由于變量是儲存在全局對象或者函數調用對象上的,因此當在function中定義變量時,無論這個變量定義在function的什么地方,這次function調用所使用的函數調用對象中必然會出現一個與此變量同名的屬性。如此一來,function中的任何地方都可以訪問到該變量。

涉及到函數調用,JavaScript中還有一個更有趣的概念:變量的作用域鏈 — 由于變量是儲存在全局對象或者函數調用對象上的,因此在訪問變量時,可以從多個對象上獲取值。以下面的代碼為例:

代碼如下:
var x = "test";
function(){
//level-1 function
var x = "temp";
function(){
//level-2 function
var x = "real";
//try to access x here. x will be "real".
}
}

在上述代碼中2級函數(level-2 function)的內部,當試圖訪問x變量時,程序可以從3個對象上搜索相應的屬性值:調用2級函數所使用的函數調用對象、調用1級函數所使用的函數調用對象、全局對象 — 根據函數定義的嵌套關系,JavaScript將生成一個由全局對象和函數調用對象所組成的對象鏈。訪問變量時,程序將從離訪問語句最近的那個對象開始搜索,如果沒有搜索到,則在對象鏈中上一級的對象中繼續進行搜索,直至全局對象。

由于這個對象鏈與變量的作用域有關,因此也叫做“作用域鏈”。

如果需要臨時改變作用域鏈,將某個對象插入到作用域鏈的最前端(作為最先訪問到的那個函數對象),可以使用with語句:

代碼如下:
with(o){
//code use properties of object o.
}

不過,在JavaScript嚴格模式下,with語句是被禁用的;即使在非嚴格模式下,也不推薦使用with語句。

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

JavaScript中的變量作用域介紹_javascript技巧

JavaScript中的變量作用域介紹_javascript技巧:對于變量的作用域(scope),C、Java等語言采取的是block scope的方式。與之不同,JavaScript所采取的是function scope的方式 — 變量的作用域僅由所處的function決定,與if、for等邏輯塊無關。比如,以下這個例子展示了JavaScript中與C、J
推薦度:
標簽: javascript 變量 jav
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 天天伊人| 2020年国产高中毛片在线视频 | 亚洲精品视频在线 | 日韩欧美高清 | 在线观看视频国产 | 欧美一区二区三区在线 | 日本精品久久久一区二区三区 | 国产精品香蕉一区二区三区 | 欧美亚洲韩国 | 欧美不卡在线观看 | 国产日韩欧美视频 | 中文字幕亚洲综合 | va欧美国产在线视频 | 99久久精品国产亚洲 | 久久精品一区二区三区四区 | 亚洲欧美日韩在线2020 | 国产成人99久久亚洲综合精品 | 欧美精品一区二区三区在线播放 | 香蕉久久一区二区不卡无毒影院 | 亚洲欧美视屏 | 国产精品不卡在线观看 | 91热成人精品国产免费 | 一区二区三区中文字幕 | 国产成人精品一区二区 | 精品麻豆 | 国产欧美一区二区精品性色99 | 中文字幕日本一本二本三区 | 欧美曰韩 | 欧美视频一区二区在线观看 | 久久久噜噜噜www成人网 | 亚洲欧美综合区自拍另类 | 欧美日韩专区 | 国产成人+综合亚洲+天堂 | 国产成人a∨麻豆精品 | 国产亚洲午夜精品a一区二区 | 国产亚洲午夜精品a一区二区 | 久久伊人精品一区二区三区 | 国产亚洲欧美日韩俺去了 | 国产日韩欧美精品一区二区三区 | 日韩在线欧美 | 国产视频在 |