理解基本類型和引用類型
基本類型
引用類型
1.什么是引用類型
引用類型的值是保存在內(nèi)存中的對(duì)象(例如:Object由缆、Array汗盘、Date)
-
引用類型
復(fù)制變量值 皱碘,如下:
這里把儲(chǔ)存在obj1對(duì)象中的值復(fù)制了一份給obj2,·放在了新分配的內(nèi)存空間中隐孽,但是這個(gè)值的副本實(shí)際上是一個(gè)指針癌椿,這個(gè)指針指向存儲(chǔ)在堆中的一個(gè)對(duì)象 兩個(gè)變量實(shí)際上引用的是一個(gè)對(duì)象
var obj1 = new Object();
var obj2 = obj1; obj1.name = 'daisy';
console.log(obj2.name);
-
基本類型
復(fù)制變量值,如下:
把num1中的值復(fù)制一份給num2菱阵,復(fù)制完成后踢俄,num1和num2是兩個(gè)獨(dú)立的變量、互不影響.
var num1 = 5;
var num2 = num1;
console.log(num2);
2.傳遞參數(shù)時(shí)是按值傳遞還是按引用傳遞
JS中傳遞參數(shù)是按值傳遞的晴及,但是在訪問參數(shù)時(shí)分別時(shí)按值訪問和按引用訪問
理解執(zhí)行環(huán)境
- 執(zhí)行環(huán)境是什么
執(zhí)行環(huán)境定義了變量和函數(shù)有權(quán)訪問其他數(shù)據(jù)都办,以及變量和函數(shù)各自的行為
每個(gè)執(zhí)行環(huán)境都有一個(gè)與之關(guān)聯(lián)的
變量對(duì)象,環(huán)境中定義的所有變量和函數(shù)都保存在這個(gè)對(duì)象中
- 作用域鏈?zhǔn)鞘裁?/li>
作用域鏈的前端始終是當(dāng)前執(zhí)行的代碼在環(huán)境中的變量對(duì)象虑稼,作用域中的下一個(gè)變量對(duì)象是包含環(huán)境琳钉,一直延續(xù)到全局執(zhí)行環(huán)境
當(dāng)代碼在一個(gè)環(huán)境中執(zhí)行時(shí),會(huì)創(chuàng)建變量對(duì)象的一個(gè)作用域鏈
例如:
function a(x, y) {
var b = x + y;
return b;
}
var result = a(5, 10);
函數(shù)a()的作用域鏈包含了兩個(gè)變量對(duì)象:函數(shù)自己的變量對(duì)象(其中定義著arguments對(duì)象)蛛倦、全局環(huán)境的變量對(duì)象
如圖:
在函數(shù)運(yùn)行過程中歌懒,標(biāo)識(shí)符解析是沿著作用域鏈一級(jí)一級(jí)地搜索標(biāo)識(shí)符的過程,從作用域鏈的前端開始胰蝠,然后逐級(jí)地向后回溯,找到后不再遍歷,找不到就報(bào)錯(cuò)
- 沒有塊級(jí)作用域
在JavaSscript中花括號(hào)封閉的塊沒有自己的作用域
function aa(){
if(true) {
var color = 'blue';
}
console.log(color); //blue
}
aa();
console.log(color); //報(bào)錯(cuò)
上面的栗子在if語(yǔ)句中用var聲明了color變量茸塞,該變量會(huì)被自動(dòng)添加到最接近的環(huán)境中(即函數(shù)aa()的執(zhí)行環(huán)境躲庄,所以在函數(shù)外面不能訪問到該變量,內(nèi)部是可以的)