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)
setTimeout()第一个参数为一个函数,
而你定了
setTimeout(function(func){},1000);
此时,func
是setTimeout
中的第一个函数参数的形参
,已经不是a
的形参了。因此无法访问 func 是正确的。也就是说当前作用域中,func 就是一个没有赋值的形参,所以是undefined.
在该匿名函数的作用域链中,首先是匿名函数的 func ,然后是 a 的 func 。因此下面的示例,在当前作用域找不到func的时候,去作用域链中寻找,a 的 func 会被找到。