如果我将函数应用于javascript数组,即
var a = [1,2,3,4];
var x;
a.forEach(function(val) {
x = val + 1;
// do some stuff with x
});
将变量声明留在外部作用域中或将声明放在函数中是否更好?即。
var a = [1,2,3,4];
a.forEach(function(val) {
var x = val + 1;
// do some stuff with x
});
我不知道的是x的内存分配是否比变量查找过程更昂贵。
答案 0 :(得分:0)
如果您不需要forEach
回调之外的变量,请将其置于其中。这样简单干净。记忆不是问题。
答案 1 :(得分:0)
最好将它放入循环中。没有性能差异。但是,正确使用范围是检测错误的良好起点:
var something = 5;
a.forEach(el => something = el);
console.log(something); // what is something? Why is it set?
答案 2 :(得分:0)
完全取决于你想用x变量做什么,如果你想在回调之外访问它的值然后全局声明它作为第一个场景,如果你不想访问那么声明里面是一个更好的方法。记忆消耗非常少,所以不用担心。
答案 3 :(得分:0)
我不知道的是x的内存分配是否比变量查找过程更昂贵
取决于。它取决于确切的代码,数组的大小,代码运行的频率,访问变量的代码和声明变量的范围之间有多少范围,代码所在的JavaScript引擎的优化是什么跑步等等。
所以:尽可能写出最清晰,最简单的代码, 如果 您遇到与该代码相关的性能问题,配置文件更改看看如何解决它。其他任何事情都是过早优化而浪费你的时间。
然而:根据给出的示例,如果您在回调中声明它,x
将是本地堆栈变量,并且非常便宜到分配(在执行时间方面)。我无法看到这两种方式真的很重要(如果你在外面声明它,它只是一个范围之外),但在这种情况下,最简单,最干净的代码(在回调中声明它)至少可能发生不要比其他选择更糟糕,而且我几乎肯定会说更好。但同样:如果这是一个问题,请分析实际代码。
答案 4 :(得分:0)
实际上,这种变化控制着两个参数:范围和启动 范围:如果你需要在循环之外使用这个var,那么你需要将它声明到一边,否则你可以将它放入并且每次迭代并且范围将声明,它可能会将范围内的内存保存。 启动:在大型项目中,启动可能是批评时间, 每次循环发生时你需要声明var及其浪费时间......