Javascript 變量執(zhí)行過程 和 數(shù)組 & 對(duì)象的區(qū)別

變量提升

var f = 1;
function bar(){
    f = 10;
    function f(){

    }
}
bar();
alert(f);
順序:1、提升bar,提升f
      2、f = 1
      3、bar函數(shù)執(zhí)行,創(chuàng)建閉包
         3.1、提升函數(shù)f
         3.2、給函數(shù)f賦值了10
         3.3、函數(shù)執(zhí)行完畢,閉包空間銷毀
      4、alert(f) 彈出1

JS執(zhí)行過程
1. 先提升(先提升函數(shù),再提升變量,如果名字一樣,變量提升會(huì)覆蓋函數(shù)提升)
2. 再執(zhí)行,如果遇到閉包創(chuàng)建
3. 在閉包空間中反復(fù)1和2
4. 先定義(提升),在執(zhí)行
5. 變量提升
6. 函數(shù)提升

問題提出

function change() {
  alert(typeof fn);
  function fn() {
    
  }
  var fn
}
change()

為什么不是undefined?

在js中函數(shù)的聲明 比變量?jī)?yōu)先級(jí)要高
并且定義過程不會(huì)被變量覆蓋 除非是賦值

你的代碼相當(dāng)于

function change() {
   function fn(){}
   var fn;
   alert(typeof fn) // function 不會(huì)被覆蓋
   fn=1;
   alert(typeof fn) // 1   會(huì)覆蓋
}
change()

數(shù)組和對(duì)象的區(qū)別

var arr = [ , , , ,  ,];
var obj = {
   xxx :xxx,
   xxx :xxx
}

注意 obj.xxxobj[xxx] 的區(qū)別

第一種是規(guī)定obj必須得有那個(gè)屬性,不可改變
第二種可以動(dòng)態(tài)添加屬性,通過字符串的方式

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容