关于函数内的变量提升问题

做到一道题目是这样的:

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

为什么f()和f(4)会是undefined呢??这里不是变量提升吗

阅读 1.6k
2 个回答
  • f(): 是的提升了,所以console.log()执行时f函数内存在a,不会去外部作用域找,console.log()执行时,只是声明了,没有赋值,所以是undefined
  • f(4): 你的函数根本没有定义形参,内部也没有使用arguments变量,所以传什么都跟没传一样,等同f()

  1. arguments会接收到你传进来的所有参数,不管你定义了没有或者定义了多少。

    function fun () {
        console.log(arguments)
    }
    fun(1)//
    fun(1,2,3,4,5)// 可以试试
  2. 函数形参可以当做是隐形的变量声明

    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)
    }

f();

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

f(4):
你的f()都没有定义参数,和f()是一样的

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题