2015-04-14 3 views
0

Почему мы должны объявить вторую переменную (val), когда мы можем использовать параметр функции как переменную?Почему мы должны объявить вторую переменную в приведенном ниже коде?

Вот как это выглядит на Codecademy:

var divideByThree = function (number) { 
    var val = number/3; 
    console.log(val); 
}; 
divideByThree(6); 

Я сделал некоторые изменения, как показано ниже:

var divideByThree = function (number) { 
    number = number/3; 
    console.log(number); 
}; 
divideByThree(6); 

И он работает довольно отлично !!

+2

Не уверен, что это принадлежит на слабину. FWIW, Вы правы. Однако будущий урок, скорее всего, представит концепцию закрытия. Терпение падавана. :) – Radio

+1

Вы можете, но, возможно, вам нужно исходное значение И производное значение. В этом маленьком примере нет смысла иметь «val». в каком-то другом коде может быть 'val' будет' var val = big_long_ugly_heavy_cpu_intensive_call (number) ', который вы не захотите повторять. –

+0

Ну, продолжая логику, вы можете сэкономить больше места, используя кодировку '6/3' или даже просто' 2' ... – dandavis

ответ

0

В вашем примере вам не нужно сохранять исходное значение параметра. Однако вам может быть проще использовать дополнительные переменные в будущем для более сложных функций.

Вот пример:

// This function uses the parameter "rawNumber" as a variable, but also uses an extra variable "number" 
function TestThis(rawNumber, p) { 
    // Convert the input (string) to integer 
    // parseInt returns NaN or integer. Truncates decimals 
    var number = parseInt(rawNumber); 

    // Check to see if the result is NaN or is an integer 
    if (isNaN(number)) { 
     Log(rawNumber + " is not a number.", p); // Log is my imitation of console.log() 
    } 

    // will run if number is type int 
    else { 
     if (number > 0 && number <= 100) { 
      Log(rawNumber + " is a valid number.", p); 
     } else { 
      Log(rawNumber + " is not between 1 and 100.", p); 
     } 
    } 
} 

Вы можете увидеть этот код работает в этом Fiddle.

В этой функции я использовал дополнительную переменную под названием «число» в трех разных местах. Мне не пришлось, но это было проще, чем печатать isNaN(parseInt(rawNumber)) и if(parseInt(rawNumber) > 0 && parseInt(rawNumber) <= 100). Codecademy, вероятно, решили научить вас этому, потому что проще понять, что вы можете упростить свой код, чем осознать, что можете упростить более сложный код с помощью дополнительных переменных.

Кроме того, ответ JK Price вызывает проблему читаемости. Проще говоря, этот код легче читать и понимать:

function Example(number) { 
    var processedNumber = 5/(Math.log(1/number*3.14 - 7)); 
    console.log("Message: " + (processedNumber * 2)); 
    console.log("Message: " + (processedNumber/10)); 
} 

Этот код может быть немного сложнее:

function Example(number) { 
    console.log("Message: " + ((5/(Math.log(1/number*3.14 - 7)) * 2)); 
    console.log("Message: " + ((5/(Math.log(1/number*3.14 - 7))/10)); 
} 
+0

Спасибо за внимание .. У меня есть! Кстати, я заметил, что функция еще не была вызвана. что-то вроде: TestThis (5, «overflow»); –

+0

Я фактически использовал эту функцию на веб-сайте. Функция вызывается, когда пользователь вводит новый вход (вы можете увидеть вызов функции в нижней части секции javascript в этом [скрипке] (https://jsfiddle.net/undoingtech/9zjubtcm/4/)). 'P' в' TestThis (rawNumber, p) 'является идентификатором абзаца, в который я хочу отправить любые сообщения. 'p' передается в функцию' Log (text, p) '. 'RawNumber' - это то, что вы вводите на входах. – UndoingTech

-1

Переменные должны помочь программисту лучше писать и описать лучшую историю. У вас не может быть один и тот же актер, играющий на нескольких персонажах! Единственное, что он делает, это помочь сохранить переменные отдельно.

Переменная val в этом случае помогает абстрагировать логику и, самое главное, помогать в отладке. Если это был длинный скрипт, и вы видели, что number не был тем, что вы его первоначально передали, вы можете считать его ошибкой.

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