javascript變數宣告例項分析

NO IMAGE

本文例項講述了javascript變數宣告的方法。分享給大家供大家參考。具體分析如下:

js中使用一個變數之前應當先宣告。變數使用關鍵字var來宣告。

如果未在var宣告語句中給變數指定初始值,則該變數值為undefined。
不用在宣告變數時指定變數型別,js變數可以是任意資料型別。

使用var語句重複宣告變數是合法且無害的。如果重複宣告帶有初始化器,則就和簡單的賦值語句沒啥區別。

如果試圖讀取一個沒有宣告的變數,則js會報錯。在ECMAScript5嚴格模式下,給一個沒有宣告的變數賦值也會報錯;然而從歷史上來說,在非嚴格模式下,如果給一個未宣告變數賦值,js實際上會給全域性物件建立一個同名屬性,且貌似它工作起來像一個正確宣告的全域性變數。這意味著你可以僥倖不宣告全域性變數,但這是一個壞習慣會造成很多bug,最好始終使用var來宣告變數。

在函式體內,同名的區域性變數會覆蓋全域性變數。
儘管全域性作用域寫程式碼可以不寫var語句,但宣告區域性變數時必須使用var語句,參考如下程式碼:


scope = "global";
function foo(){
scope="local"
//fk!我們剛剛修改了全域性變數!!!
}

在類似C語言的程式語言中,花括號中每一段程式碼都有各自的作用域,且變數在宣告它們程式碼段之外是不可見的,我們稱之為塊級作用域(block scope);而js中沒有塊級作用域,而是取而代之的使用了函式作用域(function scope):變數在宣告它們的函式體以及這個函式體巢狀的任意函式體內都是有定義的(無論是內巢狀還是外巢狀?)
js的函式作用域指在函式內宣告的所有變數在函式體內始終是可見的,這意味著變數在宣告前甚至可以使用了。js的這個特性非正式的稱為宣告提前(hoisting),即js函式裡宣告的所有變數(但沒有賦值)都被“提前”至函式體的頂部。


var scope = "global";
function f(){
console.log(scope);
//輸出"undefined"而不是"global"
var scope = "local";
//變數在這裡賦初始值,但變數在函式體內任何地方均是有定義的
console.log(scope);
//輸出"local"

以上程式碼等價於:


function f(){
var scope;
console.log(scope);
scope = "local";
console.log(scope);
}

當宣告一個js全域性變數時,實際上定義了全域性物件的一個屬性。
當用var宣告一個變數時,建立的這個屬性時不可配置的,即無法用delete運算子刪除;但當你沒有使用嚴格模式並給一個未宣告的變數賦值的話,js會自動建立一個全域性變數,以這種方式建立的變數是全域性物件的正常可配置屬性,是可以刪除的:


var x = 1; 
y = 2;
this.z = 3; //同上
delete x; //返回false,無法刪除變數
delete y; //返回true,變數被刪除
delete this.z //同上

希望本文所述對大家的javascript程式設計有所幫助。

您可能感興趣的文章:

javascript判斷變數是否有值的方法JavaScript 變數、作用域及記憶體Javascript變數的作用域和作用域鏈詳解JavaScript通過this變數快速找出使用者選中radio按鈕的方法javascript中區域性變數和全域性變數的區別詳解JavaScript判斷變數是否為空的自定義函式分享Javascript基礎教程之變數Javascript監視變數變化的方法