變量提升
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.xxx
和 obj[xxx]
的區(qū)別
第一種是規(guī)定obj必須得有那個(gè)屬性,不可改變
第二種可以動(dòng)態(tài)添加屬性,通過字符串的方式