1.包裝對象:
存取字符串粘拾,數(shù)字茂装,布爾值的屬性時創(chuàng)建(用String(),Number(),Boolean()構(gòu)造函數(shù)來創(chuàng)建)的臨時對象稱作包裝對象缩麸。
var s = 'test'; //創(chuàng)建字符串類型變量
s.len = 4; // 創(chuàng)建包裝對象酣胀,并為該對象創(chuàng)建len屬性信卡,賦值為4
//此時引用完畢缚够,包裝對象將自動被銷毀
console.log(s.len)//由于包裝對象已經(jīng)被銷毀幔妨,故此時查詢結(jié)果為undefined
總結(jié):每次使用字符串的屬性時,便會創(chuàng)建包裝對象(也可理解為臨時對象)谍椅,常用的字符串屬性如string.length, string.indexof()等,都是來自于創(chuàng)建包裝對象雏吭,而使用完成之后便銷毀掉锁施。
2.函數(shù)聲明提前:
第一個例子:
var foo = 1;
function func(){
? foo = 10;
? ?return;
? function foo(){} //此時函數(shù)聲明會提前,使得該函數(shù)內(nèi)的foo變?yōu)榫植孔兞浚撜Z句 ? ? ? ? ? ? ? ? ? ? ? ? ? ? //同理于此處修改為var foo;
}
console.log(foo); //輸出foo結(jié)果為1
第二個例子:
function?bar()?{
return?foo;
foo?=?10;
function?foo()?{}??//聲明提前沾谜,所以輸出"function"
var?foo?=?10;
}
console.log(typeof?bar());?//輸出"function"
當(dāng)把function?foo和var?foo換位子之后膊毁,結(jié)果依然是輸出"function",說明不存在一個先后順序的聲明覆蓋問題基跑。
當(dāng)去掉function?foo()后婚温,輸出的就是“undefined",說明var?foo也會出現(xiàn)聲明提前媳否。
當(dāng)去掉function?foo()同時也去掉var?foo后栅螟,則直接報錯未定義。
回到原代碼篱竭,那么為什么function?foo()之后的var?foo沒有起作用讓結(jié)果輸出"undefined"力图?(暫無理解辦法)
3.關(guān)于作用域:
var x =3;
var foo = {? ? ? ?
?x:2,? ? ? ??
baz: {? ? ? ? ? ??
? ? ?x:1,? ? ? ? ? ??
? ? ?bar:function(){
? ? ? ? ? ? ? ? returnthis.x;? ? ? ? ? ??
? ? ? ? }? ? ? ??
? ?}? ??
}
var go = foo.baz.bar;
console.log(go());//3, 此時該函數(shù)執(zhí)行環(huán)境在window中
console.log(foo.baz.bar());//1,此時執(zhí)行環(huán)境在baz中