js function undefined

function a(func){
    setTimeout(function(func){
        console.log('a')
        console.log(typeof(func))
        func()
    }, 1000)
}

a(b)

为什么这个func是undefined,而下面的可以

function a(func){
    setTimeout(function(){
        console.log('a')
        func()
    }, 1000)
}

a(b)
阅读 2.8k
2 个回答

setTimeout()第一个参数为一个函数,

而你定了setTimeout(function(func){},1000); 此时,funcsetTimeout中的第一个函数参数的形参,已经不是a的形参了。因此无法访问 func 是正确的。

也就是说当前作用域中,func 就是一个没有赋值的形参,所以是undefined.

在该匿名函数的作用域链中,首先是匿名函数的 func ,然后是 a 的 func 。因此下面的示例,在当前作用域找不到func的时候,去作用域链中寻找,a 的 func 会被找到。

第一个函数中,你并没有给setTimeout里面的匿名函数传任何参数,所以参数func的值为undefined。
并且匿名函数的参数func与函数a的参数func同名,所以匿名函数的参数func会屏蔽掉函数a的参数func,于是你运行的时候func自然就是undefined了。你可以试试这个

function a(func){
    setTimeout((function(func){
        console.log('a')
        console.log(typeof(func))
        func()
    })(func), 1000)
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题