3 回答

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超9個贊
你在控制臺中出現(xiàn)的結(jié)果屬于特殊情況。。。。下面將給你解惑
var有三種聲明的情形:
var聲明的全局變量
var在函數(shù)范圍內(nèi)聲明的局部變量
eval中聲明的全局變量。
你的情況屬于第3種,在firebug和chrome的控制臺中輸入的代碼最終是用eval的方式執(zhí)行的。
首先,1、2種情形var聲明的變量是無法刪除的。盡管var聲明的全局變量是屬于window對象的屬性(在瀏覽器中),但依然是無法刪除的,因?yàn)檫@種屬性的configurable=false,因此不能delete掉。局部變量就更不用說了,連var變量依附的對象都不知道在哪里,肯定無法刪除。而eval('var a = 1')看似和直接var是一樣的效果(當(dāng)然是在全局作用執(zhí)行eval),執(zhí)行完也會在window對象上創(chuàng)建一個a屬性,但是這個屬性的configurable=true,因此可以刪除。
給你一段代碼自己試驗(yàn),看看各個屬性的描述是什么。
<script type="text/javascript">
var a = 1;
console.log(Object.getOwnPropertyDescriptor(window, 'a'));
with ({}) {
var b = 1;
console.log(Object.getOwnPropertyDescriptor(window, 'b'));
console.log(delete b);
}
eval('var c = 1');
console.log(Object.getOwnPropertyDescriptor(window, 'c'));
</script>

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超10個贊

TA貢獻(xiàn)1795條經(jīng)驗(yàn) 獲得超7個贊
不能。。
你重新給其賦值 undefined
或重新聲明
var a = 0;
var a;
var a = 0 ;
a = undefined;
添加回答
舉報