2015-05-22 3 views
0

существования я делаю простой скрипт в 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 не всегда запрашивается всегда (User desides).

+0

'x === undefined' ->' ReferenceError: x не определен'. это должно быть 'typeof x === 'undefined'' – Hacketo

+0

** Всегда ** объявлять переменные. Если вы это сделаете, они создаются до того, как будет выполнен какой-либо код, проблемы с производительностью не имеют отношения к этому вопросу. – RobG

+0

Не имеет значения, когда вы объявляете свои переменные, компилятор всегда поднимает объявления переменных –

ответ

0

Если вы не хотите изменять значения x, y, z, если они уже существуют, то проверка их существования, а затем написание будет лучшим вариантом.

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

Поскольку вы работаете с RGB, это лучшая практика. Определение переменной в начале всегда считается полезным и вряд ли оказывает какое-либо влияние на производительность.

+0

Но проблема в том, что я не знаю, как перезаписать переменную с тем же значением, но мне было интересно, что быстрее, вычисляя их по запросу, рассчитывая их как можно скорее или рассчитывая и переписывая их по запросу. Что-то вроде 'function getRGB() {return red, green, blue}' vs 'function getRGB (return r * 256, g * 256, b * 256)' vs 'function getRGB() {if (red == undefined) red = r * 256; /*etc...*/ return red, green, blue} ' – YoYoYonnY

+0

инициализировать их в начале и вычислять и реализовывать по мере необходимости. – BhandariS

1

Всегда определять JavaScript переменные в верхней части, и использовать их позже, как:

'use strict'; 

var a, b, c; 

a = 1; 

if (typeof b === 'undefined') { 
    b = a || c; 
} 

// b is now 1 

Стоит отметить, что если вы не определить переменную, она становится глобальной при первом использовании (что очень плохо). Определение переменной в состоянии (например, if) также является очень плохой практикой.

+0

И, если возможно, добавьте '' use strict '; 'в свой код –

+0

@Pablo Да, я всегда' 'использую строгую';' переменная переменной – YoYoYonnY

0

если переменная не определена typeof. Условие должно быть

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

составляет 100%, чтобы быть определена следующим образом: 'var x;', но я прошу : Должен ли я объявлять в начале файла, когда вызывается функция, но только один раз или когда функция вызывается, но каждый раз, когда она вызывается, потому что я использую очень простые операции, такие как сложение, вычитание, Math.min, разделение и т. Д. – YoYoYonnY

+0

@YoYoYonnY - не имеет значения, сколько раз или где, объявляется переменная, потому что объявления переменных обрабатываются один раз, прежде чем какой-либо код будет выполнен. – RobG

+0

Нет, переписывающие переменные будут вычислять и переопределять переменную дважды, и мне было интересно, будет ли проверка на существование таким образом быстрее во второй попытке и дальше. (Но из того, что известно Ive, если (a == b) равно if (! (Ab)), я отредактировал код примера, чтобы показать, что я имею в виду. – YoYoYonnY

0

Это полностью зависит от контекста, хотите ли вы перезаписать существующее значение или нет. Независимо от наличия переменной, если вы хотите выполнить операцию, то ниже пути лучше всего.

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

Таким образом, это быстрее, потому что в первом случае вы просто проверить переменную не определен или нет, если не определено, то выполнить задание. Лучше всего выполнить задачу.

надеюсь, что это вам поможет.

+0

Но что, если мне нужно, чтобы они были рассчитаны один раз? быть постоянным после этого в любом случае, иначе иначе x, y и z снова не будут определены – YoYoYonnY

Смежные вопросы