javascript變量聲明實例分析
本文實例講述了javascript變量聲明的方法。分享給大家供大家參考。具體分析如下:
js中使用一個變量之前應(yīng)當(dāng)先聲明。變量使用關(guān)鍵字var來聲明。
如果未在var聲明語句中給變量指定初始值,則該變量值為undefined。
不用在聲明變量時指定變量類型,js變量可以是任意數(shù)據(jù)類型。
使用var語句重復(fù)聲明變量是合法且無害的。如果重復(fù)聲明帶有初始化器,則就和簡單的賦值語句沒啥區(qū)別。
如果試圖讀取一個沒有聲明的變量,則js會報錯。在ECMAScript5嚴格模式下,給一個沒有聲明的變量賦值也會報錯;然而從歷史上來說,在非嚴格模式下,如果給一個未聲明變量賦值,js實際上會給全局對象創(chuàng)建一個同名屬性,且貌似它工作起來像一個正確聲明的全局變量。這意味著你可以僥幸不聲明全局變量,但這是一個壞習(xí)慣會造成很多bug,最好始終使用var來聲明變量。
在函數(shù)體內(nèi),同名的局部變量會覆蓋全局變量。
盡管全局作用域?qū)懘a可以不寫var語句,但聲明局部變量時必須使用var語句,參考如下代碼:
scope = "global"; function foo(){ scope="local" //fk!我們剛剛修改了全局變量?。?! }
在類似C語言的編程語言中,花括號中每一段代碼都有各自的作用域,且變量在聲明它們代碼段之外是不可見的,我們稱之為塊級作用域(block scope);而js中沒有塊級作用域,而是取而代之的使用了函數(shù)作用域(function scope):變量在聲明它們的函數(shù)體以及這個函數(shù)體嵌套的任意函數(shù)體內(nèi)都是有定義的(無論是內(nèi)嵌套還是外嵌套?)
js的函數(shù)作用域指在函數(shù)內(nèi)聲明的所有變量在函數(shù)體內(nèi)始終是可見的,這意味著變量在聲明前甚至可以使用了。js的這個特性非正式的稱為聲明提前(hoisting),即js函數(shù)里聲明的所有變量(但沒有賦值)都被“提前”至函數(shù)體的頂部。
var scope = "global"; function f(){ console.log(scope); //輸出"undefined"而不是"global" var scope = "local"; //變量在這里賦初始值,但變量在函數(shù)體內(nèi)任何地方均是有定義的 console.log(scope); //輸出"local"
以上代碼等價于:
function f(){ var scope; console.log(scope); scope = "local"; console.log(scope); }
當(dāng)聲明一個js全局變量時,實際上定義了全局對象的一個屬性。
當(dāng)用var聲明一個變量時,創(chuàng)建的這個屬性時不可配置的,即無法用delete運算符刪除;但當(dāng)你沒有使用嚴格模式并給一個未聲明的變量賦值的話,js會自動創(chuàng)建一個全局變量,以這種方式創(chuàng)建的變量是全局對象的正常可配置屬性,是可以刪除的:
var x = 1; y = 2; this.z = 3; //同上 delete x; //返回false,無法刪除變量 delete y; //返回true,變量被刪除 delete this.z //同上
希望本文所述對大家的javascript程序設(shè)計有所幫助。
相關(guān)文章
利用JS解決ie6不支持max-width,max-height問題的方法
本篇文章主要介紹了利用JS解決ie6不支持max-width,max-height問題的方法。需要的朋友可以過來參考下,希望對大家有所幫助2014-01-01使用JS實現(xiàn)一個功能豐富的待辦事項應(yīng)用
在日常工作和生活中,我們經(jīng)常需要處理各種各樣的待辦事項,這篇文章主要為大家詳細介紹了如何使用JavaScript實現(xiàn)一個功能豐富的待辦事項應(yīng)用,需要的可以了解下2024-01-01JS變量中有var定義和無var定義的區(qū)別以及es6中l(wèi)et命令和const命令
這篇文章主要介紹了JS變量中有var定義和無var定義的區(qū)別以及es6中l(wèi)et命令和const命令,需要的朋友可以參考下2017-02-02