2012-04-12 83 views
1

我在调试某些Javascript时注意到我正在传递的额外参数没有出现在arguments对象中。函数声明有一个命名参数,并且正在传递两个参数,但参数数组只包含第一个参数。当试图在Javascript控制台或jsfiddle中重现问题时,参数总是正确传递。问题是什么?未包含在'参数'对象中的未命名的参数

+1

得到的代码显示? – Rob 2012-04-12 23:49:36

回答

3

该问题仅在Chrome中发生,似乎是Chrome优化。起初我没有意识到的是,在我发现参数不完整的原始函数中,我在控制台中检查了arguments,但是在我创建的所有测试中,我正在执行console.log(arguments)或类似的操作。

如果我没有在一个函数中引用arguments,Chrome不会花费它来填充它。因此,通过控制台检查参数时,它只显示作为命名参数存在的参数。我创建了一个jsfiddle来证明这一点:http://jsfiddle.net/bgmort/2kmJs/

因为我花了几个小时寻找答案,所以希望记录下我发现的内容将会为别人节省一点时间。

+0

它确实节省了我一些时间,谢谢! – regjo 2013-04-09 18:00:23

+0

太棒了!在我发布这篇文章的时候,我也注意到Chrome同样不存储任何闭包变量(我的意思是在封闭范围中定义的变量),除非它们在该范围内被引用。当然,不包括全局变量。 – undefined 2013-04-09 20:54:08

相关问题