函式宣告整體提公升
test()
;function
test()
在預編譯階段,會把函式宣告提公升到**頂部:
function
test()
test()
;
變數宣告提公升
console.
log(a)
;var a=
123;
在預編譯階段,會把var宣告提公升到**段的頂端:
var a;
console.
log(a);a=
123;
控制台輸出 undefined
但上面兩點在遇到下面這種情況時就不夠用了
function
fn(a)
console.
log(a)
;varb=
function()
console.
log(b)
functiond(
)}fn(
1);
接下來就是預編譯表演的時刻了:
ao
ao
ao
ao
,//當函式名重名時,不需要重複建立,直接賦值即可
b:undefind,
d:function()
}
原函式變為(忽略變數宣告與函式宣告):
function
fn(a)
a=123;
//把123賦給給ao中的a
console.
log(a)
;//此時a為123
console.
log(a)
;//還是123b=
function()
//把函式體賦給ao中的b
console.
log(b)
//function b() {}
functiond(
)}fn(
1);
再來乙個例子
function
test
(a,b)
functiond(
) console.
log(b);}
test(1
);
1.一切宣告的全域性變數,都是 window 的屬性
var a =3;
===> window.a =
3;
2.所有未經宣告就賦值的變數都是全域性變數
a=3;
var a = b =3;
//b未宣告就賦值
回到我們的預編譯
var a=
123;
functiona(
)a()
;
go
go===
> window
讓我們來熟悉一下全域性物件
var a=
100;
functionfn(
)fn()
;
go
}
ao
首先在自己的ao中找a屬性
aoao中沒有,去上一級go中找go}
找到a,控制台列印100
舉個栗子:
console.
log(test)
;function
test
(test)
}test(1
);var test =
123;
1.生成go,生成的過程步驟與ao一樣
go
}
console.
log(test)
;//function test() {}
function
test
(test)
test(1
);var test =
123;
2.執行到test(1)前一刻,生成ao
ao
}
3.執行test(1)(忽略變數宣告與函式宣告)
function
test
(test)
test=
234;
console.
log(test)
;//234
}
js知識點 掘金 JS小知識點補充
toc 邏輯或與邏輯與 1.在條件判斷中使用 條件中的 兩個條件都成立,整體判斷條件才會成立 條件中的 只要有乙個條件成立,整體判斷條件就成立。2.在賦值操作中使用 var a 1 2 首先驗證1是真假,如果為真,把1賦值給a,如果為假,把2賦值給a a b 先驗證a的真假,為真結果是a,為假結果是...
JS預編譯 函式預編譯和全域性預編譯
預編譯發生在函式執行前一步 建立ao物件 執行期上下文 找形參和變數宣告,將變數和形參名作為ao 屬性名,值為undefined 將實參值和形參統一 在函式體裡面找函式宣告,值賦予函式體 結果 預編譯過程 函式馬上要執行,但是還沒執行 首先建立ao物件,也就是函式它產生的儲存空間庫 ao,b und...
js小知識點
語法 eq index 使用場景 通常與其他選擇器一起使用,獲取指定組合中指定索引 index 的元素。index值從 0開始,所以第乙個元素的 index值是0 不是1。例項 獲取第11個td 的值 jsondata campaignname this parent parent parent f...