0
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ですか? この件に関して私を助けてください。

4

1 に答える 1

2

定義上、グローバル変数にはグローバル スコープがあるため、関数内で変数をインクリメントしたり、再割り当てしたりできます。これは素晴らしいことです。

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"); 
   }
}
于 2013-05-24T08:32:46.097 に答える