Вы должны понимать разницу, а затем выбрать для себя.
В принципе, у вас есть эти две модели:
х как глобальная переменная:
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);
Там два основных отличия:
если f
использует глобальную переменную, она собирается изменить глобальную переменную, а если она работает с аргументом, она не влияет на переменные видны снаружи, то есть первый код пишет x after f: 2
, в то время как второй пишет x after f: 1
если 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/";
)
Вы должны предпочесть 'var rollDie = function (userInput) {', однако в вашем случае userInput является глобальной переменной и следовательно, даже если вы не пройдете параметр, он получит значение – nikhil
ok. сэр, если вы не возражаете, можете ли вы объяснить мне, почему без написания с параметром это работает? это потому, что userInput истинно вне функции, и поэтому почему? – user3152131
Теперь он работает, потому что 'userInput' также является глобальной переменной. – dfsq