我是否需要在函数中添加参数?

时间:2015-12-19 20:07:58

标签: javascript

我想知道这种方式是否正确:

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) {

3 个答案:

答案 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);

有两个主要区别:

  1. 如果f使用全局变量,它将修改全局变量,而如果它与参数一起使用,则它不会影响外部可见的任何变量,即第一个代码写入{{ 1}},而第二个写x after f: 2

  2. 如果x after f: 1使用全局变量,则传递不同的值变得不太方便。有了参数,你甚至不需要全局变量,你可以调用f。使用全局变量,您可以使用f(1); f(2); f(3456);完成相同的操作。

  3. 我不会详细介绍细节,而是会给你一个链接: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) {会更好。