變量類型
JavaScript的變量分為兩種:基本類型和引用類型。
基本類型有五種:Undefined贸人、Null间景、Boolean、Number艺智、String倘要。除開基礎(chǔ)類型的就是引用類型,如數(shù)組,函數(shù)封拧,日期志鹃,正則表達(dá)式
基礎(chǔ)類型的變量每當(dāng)聲明一個(gè)時(shí),都會開辟一個(gè)內(nèi)存空間存貯值泽西。就算是賦值也會建立一個(gè)獨(dú)立的空間曹铃,兩個(gè)之間完全不會影響。
但是引用類型內(nèi)存里面存儲的是一個(gè)地址捧杉,就是說當(dāng)賦值一個(gè)引用類型變量的時(shí)候陕见,改變一個(gè)變量,另外一個(gè)變量也將會收到影響
基本類型實(shí)例
var num1 = 5;
var num2 = num1;
num1=6
alert(num2) // 5
var arry1 = [1,2,3]
var arry2 = arry1;
arry1.push(4);
alert(arry2); // [1,2,3.4]
引用類型在函數(shù)傳參的時(shí)候的變換
var arry1 = [1,2,3];
var arry1 = [1,2,3];
function push1(arry){
arry.push(4);
return arry;
}
var arry2 = push1(arry1);
alert(arry1) // [1,2,3,4]
這種單純的復(fù)制只能做到淺拷貝味抖,有關(guān)js 變量的深拷貝將用另外一篇文章就是描述评甜。
如何獲取變量的類型
var s = "Nicholas";
var b = true;
var i = 22;
var u;
var n = null;
var t = [1,2,3];
var y= function(){
return "qwe";
}
var o = new Object();
alert(typeof s); //string
alert(typeof i); //number
alert(typeof b); //boolean
alert(typeof u); //undefined
alert(typeof n); //object
alert(typeof o); //object
alert(typeof t); //object
alert(typeof y); //function
當(dāng)要確定引用類型變量的類型時(shí)候使用instanceof
alert(person instanceof Object); // 變量 person 是 Object 嗎?
alert(colors instanceof Array); // 變量 colors 是 Array 嗎仔涩?
alert(pattern instanceof RegExp); // 變量 pattern 是 RegExp 嗎忍坷?
作用域
每個(gè)執(zhí)行環(huán)境都有一個(gè)與之關(guān)聯(lián)的變量對象(variable object) ,每一個(gè)頁面都有一個(gè)全局執(zhí)行環(huán)境就是windon红柱。全局執(zhí)行環(huán)境直到應(yīng)用程序退出——例如關(guān)閉網(wǎng)頁或?yàn)g覽器——時(shí)才會被銷毀承匣。在js 中一個(gè)函數(shù)就是一個(gè)執(zhí)行環(huán)境,對應(yīng)一個(gè)變量對象锤悄。
代碼在一個(gè)環(huán)境中執(zhí)行的時(shí)候會創(chuàng)建一個(gè)變量對象的作用域鏈韧骗。從外到內(nèi),從大到小零聚。搜索變量的時(shí)候也會通過這個(gè)作用域鏈去尋找變量袍暴。
延長作用域鏈
通過with 和try-catch中的catch 塊
function buildUrl() {
var qs = "?debug=true";
with(location){
var url = href + qs;
}
return url;
}
在上面代碼中執(zhí)行buildUrl()。會返回url 變量隶症,就是因?yàn)閎uildUrl這個(gè)執(zhí)行環(huán)境中將location和with 塊里面的變量對象添加到buildUrl這個(gè)執(zhí)行環(huán)境中的變量對象政模。所以才可以成功返回url 這個(gè)對象。
js 沒有塊級作用域
for (var i=0; i < 10; i++){
doSomething(i);
}
alert(i);//10
這個(gè)i是存在于全局環(huán)境中的蚂会。
垃圾回收機(jī)制
局部變量只在函數(shù)執(zhí)行的過程中存在淋样。而在這個(gè)過程中,會為局部變量在棧(或堆)內(nèi)存上分配相應(yīng)的空間胁住,以便存儲它們的值趁猴。然后在函數(shù)中使用這些變量,直至函數(shù)執(zhí)行結(jié)束彪见。結(jié)束后儡司,這些變量就將被銷毀。