我是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>
我想要做的是能够在游戏中放置用户的名字。但是,一旦玩家最初在提示框中输入他们的名字,我不确定我是怎么做的。
非常感谢任何帮助。 谢谢
答案 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;
}