2015-12-19 2 views
1

мне интересно, если этот путь является правильным:Нужно ли добавлять параметр к функции?

var userInput = confirm('roll die?'); 

var rollDie = function() { 
    while(userInput) { 
    var dieSide = Math.floor(Math.random() * 6); 
     document.write('you rolled a ' + (dieSide + 1)); 


    userInput = false; 
    } 
} 

rollDie(userInput); 

Или мне нужно написать var rollDie = function(userInput) {

+0

Вы должны предпочесть 'var rollDie = function (userInput) {', однако в вашем случае userInput является глобальной переменной и следовательно, даже если вы не пройдете параметр, он получит значение – nikhil

+0

ok. сэр, если вы не возражаете, можете ли вы объяснить мне, почему без написания с параметром это работает? это потому, что userInput истинно вне функции, и поэтому почему? – user3152131

+0

Теперь он работает, потому что 'userInput' также является глобальной переменной. – dfsq

ответ

1

Эта линия:

rollDie(userInput); 

... означает, что вы пытаетесь передать значение в ваш rollDie() способ. Это не является строго необходимым, потому что вы эта переменная объявлена ​​глобально:

var userInput = confirm('roll die?'); 

Таким образом, вы не могли бы передать ничего, если вы хотите, но если вы хотите писать более чистый код, это предпочтительнее, чтобы избежать этих глобальных переменных вокруг столько, сколько вы можете. То, как вы его написали - передача значения вашей функции - намного приятнее, поэтому лучше написать var rollDie = function(userInput) {.

+0

спасибо, сэр. Теперь я понимаю это. то, что я сделал, это удалить подтверждение и включить его при вызове функции. – user3152131

+0

Отлично! Ключ состоит в том, чтобы держать ваш код раздельно аккуратно, так что он не будет конфликтовать с вашим другим кодом слишком много. Когда вы начинаете с малого, это не столько проблема, но по мере того, как ваши проекты становятся большими, это становится намного более важным. Лучше начинать красиво и аккуратно, чтобы у вас было прочное заземление. – TwoStraws

+0

спасибо, что сэр для совет – user3152131

2

Javascript работает с областями. Вы вызываете функцию «rollDie» из области, где «userInput» является переменной. Функция 'rollDie' имеет свою собственную область. В вашем примере нет переменной userInput в области функции rollDie. Там для javascript ищет переменную во внешней области и находит переменную. Таким образом, ваша программа работает, но код не является хорошим кодом.

потому что вы вызываете функцию rollDie с параметром 'userInput', вы должны добавить 'userInput' в качестве параметра функции rollDie. var rollDie = function(userInput) {} Всегда лучше дать функции все параметры, которые должна выполнить функция. Это предотвращает проблемы с этой областью в javascript при вызове функции в другом контексте и упрощает реорганизацию кода.

twoStrars быстрее :)

+0

спасибо, что сэр я сделал примечание. я буду учитывать это – user3152131

2

Вы должны понимать разницу, а затем выбрать для себя.

В принципе, у вас есть эти две модели:

х как глобальная переменная:

var x = 1; 

var f = function() { 
    console.log('x in f:', x); 
    x = 2; 
} 

console.log('x before f:', x); 
f(); 
console.log('x after f:', x); 

и х в качестве аргумента:

var x = 1; 

var f = function(x) { 
    console.log('x in f:', x); 
    x = 2; 
} 

console.log('x before f:', x); 
f(x); 
console.log('x after f:', x); 

Там два основных отличия:

  1. если f использует глобальную переменную, она собирается изменить глобальную переменную, а если она работает с аргументом, она не влияет на переменные видны снаружи, то есть первый код пишет x after f: 2, в то время как второй пишет x after f: 1

  2. если f использует глобальную переменную, то становится менее удобным передавать ему разные значения. С аргументом вам даже не нужна глобальная переменная, вы можете позвонить f(1); f(2); f(3456);. С глобальными vaiables, вы должны сделать то же самое с var x=1; f(); x=2; f(); x=3456; f();.

Вместо того, чтобы идти больше в детали, я дам вам ссылку: Why are global variables evil?

Во всяком случае, есть случаи, когда глобальные переменные хороши! Я бы сделал глобальную переменную для значения, которое является постоянным и используется несколькими функциями (var GRAVITY = 9.81; или var BASE_URL = "https://stackoverflow.com/";)

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