JavaScript:参数泄漏
JavaScript: arguments leak var array.slice.call?
在这篇优化杀手文章中,argument leak
提到了以下代码。
function leaksArguments2() {
var args = [].slice.call(arguments);
}
然而,我不能理解为什么参数可以通过Array.slice
泄漏?
[].slice.call(arguments)
"泄漏"参数,因为它保留了对参数对象的引用。泄漏参数对象会破坏优化,因为它迫使V8将参数实例化为Javascript对象,而不是将它们优化为堆栈变量。
你应该能够创建一个参数数组的副本,而不保留原始文章中提到的对象引用:
function doesntLeakArguments() {
//.length is just an integer, this doesn't leak
//the arguments object itself
var args = new Array(arguments.length);
for(var i = 0; i < args.length; ++i) {
//i is always valid index in the arguments object
args[i] = arguments[i];
}
return args;
}
相关文章:
- 函数参数中的数据与指定变量之间的任何性能差异
- 使用Express捕获参数
- 参数变量出现ngTable指令问题
- AngularJS:我可以跳过函数参数回调吗
- 如何使用skip参数使用angular ui引导进行服务器端分页
- 要求未定义JS回调参数
- 我的jQuery插件参数没有正确启动,遇到了问题
- 获取@ResponseBody的一部分作为主干和Spring MVC控制器之间的参数
- jquery设置为使用参数运行
- Javascript”;类“;带有参数的扩展
- 为什么grunt contrib connect的中间件选项的第三个参数是未定义的
- 函数未将值作为参数传递
- 如何将参数传递到angularJs中的工厂
- JS:检查URL中的参数,然后迭代一个参数为var的函数
- 正在传递JSONP标头's数据参数到另一个文件中的AJAX请求
- MVC 3页面导航和使用javascript传递参数
- 从查询字符串参数推断出正确的数据类型
- 传递包含'%的参数'在URL中
- 避免将jquery选择器作为构造函数参数发送时内存泄漏
- JavaScript:参数泄漏