gpt4 book ai didi

javascript函数范围,变量声明

转载 作者:行者123 更新时间:2023-11-30 18:46:56 24 4
gpt4 key购买 nike

假设我有以下场景:

var namespace = {};
(function($)
{
$.extend(namespace,
{
test1: function(someArray, someObj)
{
for(var i= 0, ii= someArray.length;i<ii;i++)
{
var text = someObj[someArray[i]];
// do something with text
}
},
test2: function(someArray, someObj,i,ii,text)
/*
see that the i,ii,text are unused parameters,
that will be used instead of variables
*/
{
for(i= 0, ii= someArray.length;i<ii;i++)
{
text = someObj[someArray[i]];
// do something with text
}
},
});
})(jQuery);

现在,test1 和 test2 的结果是一样的……但是性能、内存使用情况……上面两种方式声明 i,ii, test 变量有什么不同吗?

例如,我认为 test2 可能更有效,因为变量在局部函数范围内,所以在函数退出后,执行上下文被销毁,释放用于参数的资源......变量将不分配给全局对象“窗口”。

那么哪种方法效果最好?为什么?


[编辑]

感谢大家的回答!

如果代码有可读性问题也没有问题...我现在只对性能/内存使用感兴趣。

最佳答案

如果您不使用 var i 声明您的变量,那么它们将隐式成为全局变量。

总是声明你的变量。如果您对此进行了任何基准测试,您会发现声明的局部变量实际上比隐含的全局变量更快。此外,您不会以这种方式泄漏到全局状态。

Benchmark! .

如您所见,性能是相同的。

就内存使用而言,局部变量 (test1) 可能更好,因为编译器不必记住该函数有 5 个参数。

但这是一个纳米优化如果您关心这种能力的性能差异,请改写程序集。寻找可读可维护的代码。

[编辑]

没有注意到方法参数中的“本地”变量。那是可读性 killer !不要那样做。你会发现 test1 可能仍然更有效率。

关于javascript函数范围,变量声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5194362/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com