鍍金池/ 問答/網(wǎng)絡(luò)安全  HTML/ 關(guān)于函數(shù)內(nèi)的變量提升問題

關(guān)于函數(shù)內(nèi)的變量提升問題

做到一道題目是這樣的:

var a=2;
function f() {
  console.log(a);
  var a=3;
}  
f();// undefined
f(4);// undefined

為什么f()和f(4)會(huì)是undefined呢??這里不是變量提升嗎

回答
編輯回答
誮惜顏

f();

    var a=2;
    function f() {
      var a; // 變量提升
      console.log(a);
      var a=3;
    }

f(4):
你的f()都沒有定義參數(shù),和f()是一樣的

2018年6月3日 20:36
編輯回答
挽青絲
  • f(): 是的提升了,所以console.log()執(zhí)行時(shí)f函數(shù)內(nèi)存在a,不會(huì)去外部作用域找,console.log()執(zhí)行時(shí),只是聲明了,沒有賦值,所以是undefined
  • f(4): 你的函數(shù)根本沒有定義形參,內(nèi)部也沒有使用arguments變量,所以傳什么都跟沒傳一樣,等同f()

  1. arguments會(huì)接收到你傳進(jìn)來的所有參數(shù),不管你定義了沒有或者定義了多少。

    function fun () {
        console.log(arguments)
    }
    fun(1)//
    fun(1,2,3,4,5)// 可以試試
  2. 函數(shù)形參可以當(dāng)做是隱形的變量聲明

    function fun (a, b) {
        console.log(a, b)
    }
    fun (1,2,3)
    // 函數(shù)內(nèi)執(zhí)行時(shí)可以看做
    {
        let a = 1
        let b = 2
        // let c = 3 可是函數(shù)定義時(shí)并沒有提供c這個(gè)形式上的參數(shù),所以不會(huì)有這一步
        console.log(a, b)
    }
2017年7月13日 09:04