0

重複の可能性:
現在の状態の console.log オブジェクト

基本的な同期および非同期動作を理解しています。

// this block gets executed all at once the next time the js engine can run it
setTimeout(function() { 
    var snacks = "cookies";
    snacks += "and popcorn";
    console.log("goodbye world"); 
}, 0);

console.log("hello world"); // this block runs before the block above

ここで最初のコンソールが報告する理由がわかりません[]:

var x = [];
x.push({ a: "c" });
console.log(x); // says []
x.splice(0, 1);
console.log(x); // says []
4

1 に答える 1

0

これはコンソール自体の問題であり、現在の値が表示されます。実際の値は、期待どおりです。この動作は、ログに記録するプリミティブ値 (文字列、数値、ブール値、null、未定義) には影響しません。

シリアル化された配列をログに記録してみてください。

var x = [];
x.push({ a: "c" });
console.log(JSON.stringify(x)); // says '[{"a":"c"}]'
x.splice(0, 1);
console.log(JSON.strinfigy(x)); // says '[]'

そして、最初のコード例に関する注意: 最初のブロックが 2 番目に実行されることは完全に正しいわけではありません。呼び出しは、最後の呼び出しの前に行われます。後で実行されるのは、渡されたコールsetTimeoutバック関数だけです。console.logsetTimeout

于 2012-10-23T19:09:37.400 に答える