覆盖变量或检查是否存在

Overwrite variable or check for existance

本文关键字:是否 存在 检查 变量 覆盖      更新时间:2023-09-26

我正在用Javascript编写一个简单的脚本,计算一些东西,如最小值,最大值等,我想知道以下哪个会更快,而且大多数情况下,为什么:

var x, y, z;
function test(){
if (x === undefined)
    x = Math.min(a, b);
if (y === undefined)
    y = a / b;
if (z === undefined)
    z = a - b;
    return [x, y, z];
}
test(); test(); test();

function test() {
    return [Math.min(a, b), a / b, a - b]
}

另外,我是否应该以第一种方式创建变量(仅在请求时定义它们),还是应该尽快定义变量,例如在函数开始时?我正在创建一个RGB到HSV脚本,使用恒定的RGB值。HSV不一定总是被请求(用户决定)。

始终在顶部定义javascript变量,并在以后使用它们,如:

'use strict';
var a, b, c;
a = 1;
if (typeof b === 'undefined') {
    b = a || c;
}
// b is now 1

值得一提的是,如果你没有定义一个变量,它在第一次使用时就变成了一个全局变量(这是非常糟糕的)。在条件(例如if)中定义变量也是一个非常糟糕的做法。

如果您不想更改已经存在的x,y,z值,那么检查它们是否存在,然后重写将是更好的选择。

if (x === undefined)
    x = Math.min(a, b);
if (y === undefined)
    y = a / b;
if (z === undefined)
    z = a - b;

由于您正在使用RGB,这是最佳实践。在开始时定义变量总是被认为是有帮助的,它几乎不会对性能产生任何影响。

如果变量没有定义,则使用typeof。条件应该像

if(typeof x === 'undefined'){
//do something
}

是否要覆盖现有值完全取决于上下文。不管变量是否存在,如果你想要执行操作,那么下面的方法是最好的。

x = Math.min(a, b);
y = a / b;
z = a - b;

这种方式更快,因为在第一种方式中你只是检查变量是否未定义,如果未定义则执行任务。最好直接执行任务。