Javascript 变量、函数的声明
javascript變量
全局變量和局部變量
????按照變量的作用域來(lái)區(qū)分,和大多數(shù)編程語(yǔ)言類(lèi)似,javascript變量也分為全局變量和局部變量。全局變量的作用域是整個(gè)js文件,而局部變量的作用域是該變量被定義的函數(shù)內(nèi)部,也包括在該函數(shù)內(nèi)部定義的函數(shù)的內(nèi)部。其實(shí)無(wú)論是全局變量還是局部變量,他們都是在其被創(chuàng)建的環(huán)境(比如函數(shù))中,以及被創(chuàng)建的環(huán)境所包含的子環(huán)境(比如函數(shù)內(nèi)部的函數(shù))中有效。
塊作用域
????變量的作用域是基于函數(shù)的,而不是基于塊的。在c++中,在花括號(hào) { }中聲明的變量,在花括號(hào)外不可見(jiàn),這就是塊作用域;而在javascript中,花括號(hào)內(nèi)部聲明的局部變量,在花括號(hào)外仍可見(jiàn)。
?
變量和函數(shù)的聲明
????在javascript引擎解析javascript代碼的時(shí)候,首先javascript引擎會(huì)把變量和函數(shù)的聲明提前進(jìn)行預(yù)解析,然后再去執(zhí)行其他代碼。
變量的聲明
????變量的聲明只有一種方式,就是用var關(guān)鍵字聲明,直接賦值不是一種聲明方式!它僅僅是在全局對(duì)象上創(chuàng)建了新的屬性(而不是變量)。
????var num = 1; 是在當(dāng)前域中聲明變量,如果在方法中聲明,則為局部變量;如果是在全局域中聲明,則為全局變量。
????而num=1; 是對(duì)屬性賦值的操作,首先,它會(huì)嘗試在當(dāng)前作用域鏈中解析num,如果在當(dāng)前作用域鏈中找到num,則會(huì)執(zhí)行對(duì)num屬性賦值;如果沒(méi)有找到num,它會(huì)在上一層作用域鏈中找.... 直到找到最上層的作用域,即全局作用域,此時(shí)它會(huì)在全局作用域中創(chuàng)造num屬性并賦值。
????由于變量聲明自帶不可刪除屬性,比如var num=1 和 num = 1,前者是變量聲明,帶不可刪除屬性,因此無(wú)法被刪除;后者為全局變量的一個(gè)屬性,可以從全局變量中刪除。
聲明和賦值的區(qū)別
(1)聲明會(huì)在解釋器預(yù)解析js代碼的時(shí)候被提前,而賦值不會(huì)。
?
(2)直接賦值形式是在執(zhí)行階段創(chuàng)建
alert(a); // undefined b = 10; alert(b); // 10, 代碼執(zhí)行階段創(chuàng)建var a = 20; alert(a); // 20, 代碼執(zhí)行階段修改?
(3)變量不能被刪除,屬性可以
a = 10; alert(window.a); // 10,是一個(gè)全局對(duì)象window的屬性 alert(delete a); // true alert(window.a); // undefined var b = 20; alert(window.b); // 20 alert(delete b); // false alert(window.b); // 仍然為 20,因?yàn)樽兞渴遣荒軌騽h除的。?
函數(shù)聲明
????函數(shù)聲明有三種方式:
(1)function name(){} 直接創(chuàng)建
?
(2)new Function 構(gòu)建函數(shù)創(chuàng)建
var add=new Function("a", "b", "return a+b;"); add(4,5);?
(3)給變量賦值匿名函數(shù)方法創(chuàng)建
var add = function(a,b){return a+b; } add(4,5); ?其中,第二種和第三種方法,在聲明前訪問(wèn)時(shí),返回的都是一個(gè)undefined的變量。在聲明后訪問(wèn)他們都是一個(gè)function的函數(shù)。
如果變量名和函數(shù)名聲明相同,函數(shù)優(yōu)先聲明
?
總結(jié)
以上是生活随笔為你收集整理的Javascript 变量、函数的声明的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: js函数基础知识
- 下一篇: 20145209 2016-2017-2