執(zhí)行環(huán)境、作用域鏈

理解基本類型和引用類型

基本類型

點(diǎn)擊瀏覽JS的基本數(shù)據(jù)類型

引用類型

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語句中用var聲明了color變量,該變量會(huì)被自動(dòng)添加到最接近的環(huán)境中(即函數(shù)aa()的執(zhí)行環(huán)境,所以在函數(shù)外面不能訪問到該變量,內(nèi)部是可以的)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容