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)
1 回答
慕桂英546537
TA贡献1848条经验 获得超10个赞
setTimeout()第一个参数为一个函数,
而你定了setTimeout(function(func){},1000);
此时,func
是 setTimeout
中的第一个函数参数的形参
,已经不是a
的形参了。因此无法访问 func 是正确的。
也就是说当前作用域中,func 就是一个没有赋值的形参,所以是undefined.
在该匿名函数的作用域链中,首先是匿名函数的 func ,然后是 a 的 func 。因此下面的示例,在当前作用域找不到func的时候,去作用域链中寻找,a 的 func 会被找到。
添加回答
举报
0/150
提交
取消