躍然一笑
2019-03-14 18:19:13
做到一道題目是這樣的:var a=2;function f() { console.log(a); var a=3;} f();// undefinedf(4);// undefined為什么f()和f(4)會是undefined呢??這里不是變量提升嗎
2 回答

天涯盡頭無女友
TA貢獻1831條經驗 獲得超9個贊
f(): 是的提升了,所以console.log()執行時f函數內存在a,不會去外部作用域找,console.log()執行時,只是聲明了,沒有賦值,所以是undefined
f(4): 你的函數根本沒有定義形參,內部也沒有使用arguments變量,所以傳什么都跟沒傳一樣,等同f()
arguments會接收到你傳進來的所有參數,不管你定義了沒有或者定義了多少。
function fun () {
console.log(arguments)
}
fun(1)//
fun(1,2,3,4,5)// 可以試試
函數形參可以當做是隱形的變量聲明
function fun (a, b) {
console.log(a, b)
}
fun (1,2,3)
// 函數內執行時可以看做
{
let a = 1
let b = 2
// let c = 3 可是函數定義時并沒有提供c這個形式上的參數,所以不會有這一步
console.log(a, b)
}

素胚勾勒不出你
TA貢獻1827條經驗 獲得超9個贊
f();
var a=2;
function f() {
var a; // 變量提升
console.log(a);
var a=3;
}
f(4):
你的f()都沒有定義參數,和f()是一樣的
添加回答
舉報
0/150
提交
取消