【问题标题】:can global variables be incremented in javascriptjavascript中的全局变量可以递增吗
【发布时间】:2013-05-24 08:23:57
【问题描述】:
var t = 0;
function addDiv()
{
    var div = document.createElement("div");
    t++;
    div.setAttribute("id", "box" + t);
    document.body.appendChild(div);
    AddStyle();
}

var h = 0;
var p = 1;    
function doMove()
{
    var okj = document.getElementById("box" + p);

    if (p <= t) {
        p++; 
    }
    var g = setInterval(function () {
        var go = parseInt(okj.style.left, 0) + 1 + "px";
        okj.style.left = go;
    }, 1000 / 60);
}

我的问题是,在 p 增加 p++ 之后,我的 var p = 1 每次调用 doMove 时都会增加吗?请帮我解决这个问题。

【问题讨论】:

  • 你不能做一个 alert(p) 看看它是否真的增加了吗? - 我想不会,因为 t 不是全局的,所以 p 永远不是
  • 请看这个非常好的问题和答案:[JavaScript 变量范围][1] [1]:stackoverflow.com/questions/500431/javascript-variable-scope
  • 我在下面的回答有帮助吗?
  • @Borgtex 对不起,我忘了提到有一个名为 t=0 的变量,我没有得到的是 javascript 是基于 p 如何向后退并每次递增
  • @MarkWalters 抱歉,我忘了提到顶部有一个名为 t=0 的变量

标签: javascript variables scope increment


【解决方案1】:

根据定义,全局变量具有全局范围,因此您可以在函数中递增或重新分配它们,这将起作用,这真是太棒了!

尽管 Borgtex 指出您的 if 声明不起作用

if (p <= t) {
   p++; 
}

您已经在另一个函数中声明了变量t,因此您的doMove() 函数无法访问它,因此该语句将始终返回false;如果您将 t 设为全局变量或将其作为参数传递给您的 doMove() 函数,那么这将起作用。

var p = 1; // this variable is global

function varTest(){
   p++ //This will work because p is global so this function has access to it.
   var t = 0;
}

function anotherTest(){
   if(p<t){   //This will return false - t is not in scope as it was defined in another function
      alert("supercalifragilisticexpihalitoscious"); 
   }
}

【讨论】:

  • @Connor 我的错,我上次看到它是很久以前的事了,我对这部电影的记忆有点歪曲。谢谢指正,以后不会再犯这种错误了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-26
  • 2014-03-14
  • 2011-05-09
  • 1970-01-01
  • 2022-06-22
  • 2018-09-02
  • 2012-05-14
相关资源
最近更新 更多