foo()
追跡するために、何らかの識別子をに渡すことができます。これを試して:
setTimeout(function () { foo(1); }, 10);
setTimeout(function () { foo(2); }, 10);
そしてfoo()
、id 引数を受け入れて渡すように関数を変更します。
function foo(id) {
/* some statements */
bar(id);
}
function bar(id) {
try {
throw {
name: "Exception",
message: "oooh damn!" + id
}
} catch (e) {
console.error(e.name, e.message);
}
}
フィドルの例を参照してください: http://jsfiddle.net/amyamy86/Am8mf/
だから、もしそうなら:
setTimeout(function () { foo(1); }, 10);
setTimeout(function () { foo(2); }, 10);
それから戻ってきます:
Exception oooh damn!1
Exception oooh damn!2
または私がする場合:
setTimeout(function () { foo(1); }, 10);
setTimeout(function () { foo(2); }, 9);
それから戻ってきます:
Exception oooh damn!2
Exception oooh damn!1
編集 #2 IDを引数として渡す必要がないようにするには:
var currentId = null;
function foo() {
var id = currentId; // since it's copied over to 'id', we don't care about 'currentId' anymore
var bar = function() {
try {
throw {
name: "Exception",
message: "oooh damn!" + id
}
} catch (e) {
console.error(e.name, e.message);
}
}
/* some statements */
bar();
}
setTimeout(function () {
currentId = 1;
foo();
}, 10);
setTimeout(function () {
currentId = 2;
foo();
}, 10);
つまり、currentId
は共有変数ですが、 が終了した瞬間に設定されsetTimeout()
、関数を実行します。
そうやって:
setTimeout(function () {
currentId = 1;
foo();
}, 10);
setTimeout(function () {
currentId = 2;
foo();
}, 9);
それから戻ってきます:
Exception oooh damn!2
Exception oooh damn!1