如何重复使用变量

时间:2013-04-23 20:38:28

标签: javascript jquery

我是Jquery和Javascript的新手。我试着在网站上搜索我的问题的答案,但我不确定我是否使用正确的术语来找到我的答案。如果有答案,我会很感激这个链接,所以我可以看一下。

我的问题: 我正在使用HTML,CSS,Jquery和Javascript构建移动应用程序。这是一个互动的CYOA类型的游戏/应用程序。我使用以下功能让玩家输入他们的名字:

<script> //to get player's name and use through out the game
function playerName ()
{
    var x;
    var player=prompt("Please enter your name");
if (player!=null)
    {
    x= " " + player + ", Please wait while the system updates your work orders";
    document.getElementById("logon").innerHTML=x;
    }
}
</script>

我想要做的是能够在游戏中放置用户的名字。但是,一旦玩家最初在提示框中输入他们的名字,我不确定我是怎么做的。

非常感谢任何帮助。 谢谢

10 个答案:

答案 0 :(得分:5)

为整个应用程序创建一个全局命名空间,并在其中放置任何相关值。

var MyApp = {};

MyApp.playerName = function () {
    var x;
    MyApp.player=prompt("Please enter your name");
    if (MyApp.player!=null) {
        x= " " + MyApp.player + ", Please wait while the system updates your work orders";
        document.getElementById("logon").innerHTML=x;
    }
}

您需要将playerName()的调用更改为MyApp.playerName()

答案 1 :(得分:4)

我建议像下面这样简单的东西,只要player变量是在任何函数之外定义的(在这里它是,因为值是从函数返回的)它将具有全局性范围(您也可以通过省略var关键字来实现这一点,这使得变量全局范围无论定义的位置如何):

function playerName(){
    var name = prompt('What is your name?'),
        x;
    if (player) {
        x = " " + name + ", Please wait while the system updates your work orders";
        document.getElementById("logon").innerHTML=x;
    }
    return name;
}
var player = playerName;

答案 2 :(得分:2)

我快门建议,但你可以将player变量设为全局。

var player;

function playerName () {
    var x;
    player=prompt("Please enter your name");
    if (player!=null) {
        x= " " + player + ", Please wait while the system updates your work orders";
        document.getElementById("logon").innerHTML=x;
    }
}

答案 3 :(得分:1)

你可以通过这样的范围来避免使其全球化:

(function() {
    var player;
    function playerName ()
    {
        var x;
        player=prompt("Please enter your name");
        if (player!=null)
        {
            x = " " + player + ", Please wait while the system updates your work orders";
            document.getElementById("logon").innerHTML=x;
        }
    }   
})();

现在可以访问您在最外层函数声明(但不是全局)内部编写的任何代码的播放器变量。

答案 4 :(得分:0)

在函数外部创建一个全局变量:

var player='';

然后您可以从函数中设置它:

function myFunction(){ player='new name'; }

或阅读:

function myOtherFunction(){ console.log(player) }

答案 5 :(得分:0)

您所面对的是variable scope。变量只能在声明它的块(想象大括号{})中可见。

但是,您还可以访问已在外部作用域中的其他变量,例如window。举一个插图的例子:

alert(foo); // undeclared
alert(window.bar); // undeclared--so far...

function foo(){
  var foo = "foo";
  window.bar = "bar";

  alert(foo); // works -- "foo";
  alert(window.bar); works -- "bar";
}

alert(foo); // undeclared
alert(window.bar); // undeclared (still, haven't called foo() yet)

foo();
alert(window.bar); // "bar" (now it works)

这也适用于函数的名称和您可能具有的任何其他类型的引用。但是,在这种情况下,您可以从函数返回一个值并避免使用全局变量。

答案 6 :(得分:0)

在窗口级别定义全局变量通常是在jQuery中执行此操作的方法 - 在本例中为“window.player”。虽然您在技术上可以通过简单地省略“var”来实现全局,但不建议这样做。

答案 7 :(得分:0)

或许只需要创建一个player对象就足够了:

var player = {};

将其放在您的应用程序中,不在任何其他功能之外。然后,当你需要在播放器上设置一个值,例如他/她的名字时,把它放在函数中:

player.name = prompt("Please enter your name");

这样,您可以访问这些数据,但您不必使用全局变量,这些变量是在没有var关键字的情况下创建的,并且被广泛认为是非常糟糕的形式。

答案 8 :(得分:0)

为了使用变量x通过其他函数和你的脚本你可以使它全局化,在一个函数中创建一个变量全局,你可以试试这个:

<script>
function foo() {
    window.newGlobalVariable = 'moo';
}
</script>

例如在您的代码中:

<script> //to get player's name and use through out the game
function playerName (){

    widnow.x;
    widnow.player=prompt("Please enter your name");
   if (player!=null){
       x= " " + player + ", Please wait while the system updates your work orders";
       document.getElementById("logon").innerHTML=x;
   }
}
</script>

答案 9 :(得分:-1)

另一种解决方案(诚然不是最好的)是使playerName成为函数的属性。这会暴露它而不会污染全局范围。只是在JS中演示函数作为对象的功能。

function playerName ()
{
    var x;
    var player=prompt("Please enter your name");
    if (player!=null)
    {
        x= " " + player + ", Please wait while the system updates your work orders";
        document.getElementById("logon").innerHTML=x;
    }
    playerName.player = player;
}