變量提升
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ù),再提升變量栋齿,如果名字一樣苗胀,變量提升會覆蓋函數(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ù)的聲明 比變量優(yōu)先級要高
并且定義過程不會被變量覆蓋 除非是賦值
你的代碼相當(dāng)于
function change() {
function fn(){}
var fn;
alert(typeof fn) // function 不會被覆蓋
fn=1;
alert(typeof fn) // 1 會覆蓋
}
change()
數(shù)組和對象的區(qū)別
var arr = [ , , , , ,];
var obj = {
xxx :xxx,
xxx :xxx
}
注意 obj.xxx
和 obj[xxx]
的區(qū)別
第一種是規(guī)定obj必須得有那個屬性基协,不可改變
第二種可以動態(tài)添加屬性,通過字符串的方式