2015-12-19 54 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

。先生,如果你不介意,你可以解释一下为什么不用参数写作它的作品?是因为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与范围一起使用。您可以从'userInput'是变量的范围调用函数'rollDie'。函数'rollDie'有它自己的范围。在你的例子中,在函数rollDie的范围内没有变量'userInput'。那里的JavaScript正在寻找外部范围内的变量,并找到变量。所以你的程序正在工作,但代码不是很好的代码。

因为您使用参数'userInput'调用函数rollDie,您应该将'userInput'作为param添加到函数rollDie中。 var rollDie = function(userInput) {}函数所需执行的所有参数总是最好。当你在其他上下文中调用该函数并使得重构代码变得更容易时,这个问题在JavaScript中的'this'范围中。

twoStrars更快:)

+0

谢谢先生,我已经做了笔记。我会牢记这一点 – user3152131

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使用全局变量,它会修改全局变量,而如果用一个参数的作品,它不会影响任何变量的外部可见,即第一码写入x after f: 2,而第二写入​​

  2. 如果f使用全局变量,那么将不同的值传递给它会变得不太方便。有了一个参数,你甚至不需要一个全局变量,你可以调用f(1); f(2); f(3456);。使用全球变量,您可以完成与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/";

相关问题