JavaScript 變量作用域分析
/* 代碼1 */
var scope = "global ";
function checkScope() {
var scope = "local ";
function childCheck() {
var scope = "childLocal ";
document.write(scope);
}
function childUndefined() {
document.write(scope);
var scope;
}
function childOverride() {
scope = "childOverride ";
document.write(scope);
}
document.write(scope); //輸出"local"
childCheck(); //輸出"childLocal"
childUndefined(); //輸出"undefined"
childOverride(); //輸出"childOverride"
document.write(scope); //輸出"childOverride"
}
checkScope(); //輸出"local childLocal undefinedchildOverride childOverride"
document.write(scope); //輸出"global "
全局作用域與局部作用域
全局(global)變量的作用域是全局的,在Javascript中處處有定義;而函數(shù)內(nèi)部聲明的變量是局部(local)變量,其作用域是局部性的,只在函數(shù)體內(nèi)部有定義。對(duì)于下面的輸出讀者應(yīng)不會(huì)感到意外。
/* 代碼2 */
var scope = "global";
function checkScope() {
var scope = "local";
document.write(scope);
}
checkScope(); //輸出"local"
document.write(scope); //輸出"global"
全局變量作用域中使用變量可以不用var語(yǔ)句,但在聲明局部變量是一定要使用var語(yǔ)句,否則會(huì)視為對(duì)全局變量的引用??聪旅娲a:
/* 代碼3 */
var scope = "global";
function checkScope() {
scope = "local";
document.write(scope);
}
checkScope(); //輸出"local"
document.write(scope); //輸出"local"
沒有塊作用域
Javascript沒有塊級(jí)作用域,函數(shù)中聲明的變量在整個(gè)函數(shù)中都是有定義的。對(duì)于下面的代碼對(duì)于生疏的讀者可能頗感意外:
/* 代碼4 */
var scope = "global";
function checkScope() {
document.write(scope); //語(yǔ)句4.1
var scope = "local"; //語(yǔ)句4.2
document.write(scope);
}
checkScope(); //輸出"undefinedlocal"
由于語(yǔ)句4.1(var scope = "local";)聲明的變量在整個(gè)checkScope函數(shù)作用域內(nèi)都有效,因此在語(yǔ)句4.2(document.write(scope); )執(zhí)行的時(shí)scope引用的是局部變量,而此時(shí)局部變量scope尚未定義,所以輸出”undefined”。因此一個(gè)好的編程習(xí)慣是將所有的變量聲明集中起來(lái)放在函數(shù)的開頭。
在了解了上述內(nèi)容之后,讀者再看看代碼1應(yīng)該不會(huì)感到困惑了。
對(duì)象的屬性變量
對(duì)象的屬性變量比較容易理解,看一下下面的代碼讀者應(yīng)該不會(huì)感到疑惑。
/* 代碼5 */
var scope = "global ";
var obj = new Object();
obj.scope = "object ";
obj.checkScope = function () {
var scope = "loacl ";
document.write(scope); //輸出"loacl"
document.write(this.scope); //輸出"object"
document.write(window.scope); //輸出"global"
}
obj.checkScope(); //輸出"loacl object global"
相關(guān)文章
通過(guò)js隨機(jī)函數(shù)Math.random實(shí)現(xiàn)亂序
這篇文章主要介紹了通過(guò)js隨機(jī)函數(shù)Math.random實(shí)現(xiàn)亂序,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05登陸成功后自動(dòng)計(jì)算秒數(shù)執(zhí)行跳轉(zhuǎn)
本文實(shí)現(xiàn)的是這樣的一個(gè)功能登陸成功后自動(dòng)查秒跳轉(zhuǎn),具體示例如下,不了解的朋友可以學(xué)習(xí)下哦2014-01-01最簡(jiǎn)單的JavaScript驗(yàn)證整數(shù)、小數(shù)、實(shí)數(shù)、有效位小數(shù)正則表達(dá)式
這篇文章主要介紹了最簡(jiǎn)單的JavaScript驗(yàn)證整數(shù)、小數(shù)、實(shí)數(shù)、有效位小數(shù)正則表達(dá)式,其中包含保留1位小數(shù)、保留2位小數(shù)、保留3位小數(shù)等正則,需要的朋友可以參考下2015-04-04js 只能輸入數(shù)字和小數(shù)點(diǎn)的文本框改進(jìn)版
以前的版本不能輸入退格鍵等功能。2009-04-04純js實(shí)現(xiàn)倒計(jì)時(shí)功能
本文主要介紹了通過(guò)js實(shí)現(xiàn)頁(yè)面的倒計(jì)時(shí)功能的思路與方法,具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-01-01一個(gè)頁(yè)面放2段圖片滾動(dòng)代碼出現(xiàn)沖突的問題如何解決
這是一段調(diào)用圖片流動(dòng)的代碼?為什么我在首頁(yè)同時(shí)復(fù)制出二段代碼后圖片不能流動(dòng)顯示了?遇此問題很是疑惑,于是搜集整理一些實(shí)用技巧以解大伙們的燃眉之急,需要了解的朋友可以參考下2012-12-12JS實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)鏈接的幾種方式匯總
這篇文章主要介紹了JS實(shí)現(xiàn)頁(yè)面跳轉(zhuǎn)鏈接的幾種方式,簡(jiǎn)單總結(jié)了幾種頁(yè)面跳轉(zhuǎn)功能的實(shí)現(xiàn),有使用js跳轉(zhuǎn)頁(yè)面,返回上一次預(yù)覽界面及button按鈕添加事件跳轉(zhuǎn),本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2024-01-01利用JS獲取IE客戶端IP及MAC的實(shí)現(xiàn)好象不可以
利用JS獲取IE客戶端IP及MAC的實(shí)現(xiàn)好象不可以...2007-01-01