鍍金池/ 問(wèn)答/HTML/ 變量對(duì)象中全局變量為何覆蓋當(dāng)前函數(shù)的局部變量?

變量對(duì)象中全局變量為何覆蓋當(dāng)前函數(shù)的局部變量?

function foo(a) {
  var b = 2;
  function c() {}
  var d = function() {};

  b = 3;

}

foo(1);

代碼執(zhí)行之后

AO = {
    arguments: {
        0: 1,
        length: 1
    },
    a: 1,
    b: 3,
    c: function c(){},
    d: reference to FunctionExpression "d"
}

請(qǐng)問(wèn)為什么執(zhí)行代碼之后,b會(huì)變成3 b不是VO全局對(duì)象里面的嗎?

回答
編輯回答
淺時(shí)光
function foo(){
  var a = 1;
  a = 2;
}

你認(rèn)為這個(gè)第二個(gè)a = 2是操作全局變量?

你只需要記住操作變量都是先從局部作用域找,局部作用域有這個(gè)變量則操作局部變量,局部沒(méi)有繼續(xù)向外找,然后一層層向外找直到全局
你這個(gè)函數(shù)里面已經(jīng)聲明了一個(gè)局部變量b,所有在本函數(shù)內(nèi)對(duì)b的操作都是局部的

function foo(){
  a = 2;//不用var聲明使a為全局變量
}
function foo(){
  var a = 1;//聲明局部變量a并賦值1
  a = 2;//操作局部變量a賦值2 如果局部沒(méi)有a這個(gè)變量才會(huì)向外層作用域找 a賦值
}
function foo(){
  a = 1; 
  var a = 2;//變量聲明提升 導(dǎo)致第一句本來(lái)全局變量變?yōu)榫植孔兞?故等價(jià)于下面注釋

  // var a;
  // a = 1;
  // a = 2;
}
2017年3月26日 17:51