本文實例講述了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); }
當用var宣告一個變數時,建立的這個屬性時不可配置的,即無法用delete運算子刪除;但當你沒有使用嚴格模式並給一個未宣告的變數賦值的話,js會自動建立一個全域變量,以這種方式建立的變數是全域物件的正常可配置屬性,是可以刪除的:
var x = 1; y = 2; this.z = 3; //同上 delete x; //返回false,无法删除变量 delete y; //返回true,变量被删除 delete this.z //同上