0

私は何もしない単純な関数を持っています:

function doNothing(){}

次のような関数もあります。

function getJson() {
    var JSONObject = {
        "name": "John Johnson",
        "street": "Oslo West 555",
        "age": 33,
        "phone": "5551234var stuff = <%= @var %>;567"
    };
    document.getElementById("name").value = JSONObject.name;
    setTimeout(doNothing(), 1000);
    document.getElementById("street").value = JSONObject.street;

したがって、doNothing()関数は実際にはここにあるだけなので、関数にパラメーターを入れることができsetTimeoutます。

JavaScript コード全体のポイントは、最初の値をすぐに表示し、2 番目の値を 1 秒 (1000 ミリ秒) 後に表示することですが、表示されません。

誰かが私が間違っていることを教えてもらえますか? サンクス!

4

2 に答える 2

2

settimeout はスリープ関数ではありません。関数を取り、1000 ミリ秒後に呼び出します。他のコードはすぐに実行されます。

試す:

document.getElementById("name").value = JSONObject.name;

setTimeout(function(){
    document.getElementById("street").value = JSONObject.street;
}, 1000);
于 2012-05-13T20:37:39.743 に答える
1

同期実行を遅らせることはできません。JavaScript には- のsleepような関数はありません。ループとオブジェクトを使用してそれをエミュレートすることは考えないでくださいDate。遅延ループが終了するまでブラウザ全体がハングするからです。

setTimeout問題を解決するには、遅延させるコードをコールバック関数に入れるだけです。クロージャーになるので、前のスコープに存在する変数に簡単にアクセスできます。

document.getElementById("name").value = JSONObject.name;
setTimeout(function() {
    document.getElementById("street").value = JSONObject.street;
}, 1000);

ちなみに、doNothing1000 ミリ秒後に関数を実行するにはdoNothingsetTimeout- に渡しdoNothing()ます。渡すときに、通常は必要としない関数の戻り値を渡します。

于 2012-05-13T20:37:39.073 に答える