8

我正在学习 javascript,我决定创建简单的 Rock、Paper、Scissors 游戏。我想让它可以通过按钮控制。所以我用html做了这个:

<div id="game">
    <button onClick="user(rock)">Rock</button>
    <button onClick="user(paper)">Paper</button>
    <button onClick="user(scissors)">Scissors</button>
    <div id="result"></div>
    <br>
    <br>
    <button onClick="test()">DEBUG</button>
</div>

这在 .js 文件中。

var user = "none";
function user(choice){
    var user = choice;
}

function test(click){
    alert("You chose " + user);
}

所以我认为点击 Rock 按钮后,它会将 var 用户更改为 rock,但事实并非如此。在我点击摇滚然后调试按钮后,我得到“你没有选择”。

4

8 回答 8

8
<div id="game">
    <button onClick="choose('rock')">Rock</button>
    <button onClick="choose('paper')">Paper</button>
    <button onClick="choose('scissors')">Scissors</button>
    <div id="result"></div>
    <br>
    <br>
    <button onClick="test()">DEBUG</button>
</div>

var user;
function choose(choice){
    user = choice;
}

function test(click){
    alert("You chose " + user);
}                         
于 2013-03-16T22:18:24.447 回答
4

var用于声明变量。您不需要在函数中user再次声明变量。user您只需要为声明的值分配一个值。

var user; //declaration
function user(choice) {
    user = choice; //assignment
}
于 2013-03-16T22:14:19.477 回答
2

一个问题:

var user = "none";
function user(choice){
    var user = choice;
}

用户的一个变量隐藏了用户的另一个变量。

并且拥有同名的函数和变量是一个坏主意。

于 2013-03-16T22:14:21.587 回答
1

在函数范围内使用的var关键字将声明一个新的局部变量。

因此,在全局范围内,user保留 value "none"

于 2013-03-16T22:16:07.413 回答
1

也许试试这个.. 更清洁的标记.. 使用 jQuery

<div id="game">
    <button class="user" data-name="rock">Rock</button>
    <button class="user" data-name="paper">Paper</button>
    <button class="user" data-name="scissors">Scissors</button>
    <div id="result"></div>
    <br>
    <br>
    <button id="test">DEBUG</button>
</div>


$(document).ready(function() {
    var user = "none";
    $(".user").click(function() {
       user = $(this).attr("data-name");
    });

    $("#test").click(function() {
       alert(user);
    });
});

http://jsfiddle.net/rQDbe/

于 2013-03-16T22:31:46.040 回答
0

似乎是一个范围界定问题。尝试删除函数内的 var。

于 2013-03-16T22:16:24.403 回答
0

其他答案正在解决一些问题。在作为变量传递时调用函数的方式也存在问题rock,您需要使用字符串:

<button onClick="user('rock')">Rock</button>

除非您在某处声明变量但它没有显示在您的代码中。

于 2013-03-16T22:17:19.953 回答
0

选择应包含在引号中,javascript 正在寻找名为 paper 的变量等。

<button onClick="user(rock)">Rock</button>
<button onClick="user(paper)">Paper</button>
<button onClick="user(scissors)">Scissors</button>
于 2013-03-16T22:19:49.703 回答