我想知道这种方式是否正确:
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 :(得分:2)
Javascript适用于范围。你打电话给功能' rollDie'来自&user;用户输入'的范围是一个变量。功能' rollDie'有自己的范围。在您的示例中,没有变量' userInput'在rollDie函数的范围内。因为javascript正在外部范围中查找变量并找到变量。所以你的程序正在运行,但代码不是很好的代码。
因为您使用参数' userInput'来调用函数rollDie。你应该添加' userInput'作为函数rollDie的参数。 var rollDie = function(userInput) {}
给函数提供函数需要执行的所有参数总是更好。这样就可以解决“这个问题”的问题。当你在其他上下文中调用函数时,javascript中的作用域可以更容易地重构你的代码。
twoStrars更快:)
答案 1 :(得分:2)
你应该了解其中的差异,然后自己选择。
基本上,你有这两种模式:
x作为全局变量:
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);
和 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
使用全局变量,它将修改全局变量,而如果它与参数一起使用,则它不会影响外部可见的任何变量,即第一个代码写入{{ 1}},而第二个写x after f: 2
如果x after f: 1
使用全局变量,则传递不同的值变得不太方便。有了参数,你甚至不需要全局变量,你可以调用f
。使用全局变量,您可以使用f(1); f(2); f(3456);
完成相同的操作。
我不会详细介绍细节,而是会给你一个链接:Why are global variables evil?
无论如何,有些情况下全局变量都很好!我会为一个常量并由多个函数使用的值创建一个全局变量(var x=1; f(); x=2; f(); x=3456; f();
或var GRAVITY = 9.81;
)
答案 2 :(得分:1)
这一行:
rollDie(userInput);
...表示您正在尝试将值传递到rollDie()
方法中。这并非严格必要,因为您已全局声明此变量:
var userInput = confirm('roll die?');
所以,如果你想要的话,你可以传递任何东西,但是如果你想编写更清晰的代码,最好避免尽可能多地使用这些全局变量。你写它的方式 - 将值传递给你的函数 - 要好得多,所以写var rollDie = function(userInput) {
会更好。