結果是一個數字。因此它返回值9
不是對象的引用。
bind
在您的方案中沒有任何有用的效果。 bind
更改函數上下文(this
)。
返回包含值10的對象將起作用。
var f1 = function(){
var result = { value: 9 };
window.setTimeout(
function(){
console.log("timeout in 100ms");
result.value = 10;}.bind(this), 100);
return result;
};
有可能是您的問題更好的解決方案。
回調:
var f1 = function(valueCallback){
var result;
window.setTimeout(function(){
console.log("timeout in 100ms");
result = 10;
valueCallback(result);
};
這樣的功能將被用於像這樣:
f1(function(value)) {
console.log(value); // Will print 10 after 100ms.
})
另一種選擇,可以使用承諾:
var f1 = function() {
return new Promise(function(resolve, reject) {
window.setTimeout(resolve.bind(null, 10), 100);
}
}
你會打電話SUC HA功能,像這樣:
f1().then(function(value) {
console.log(value); // Will print 10 after 100ms.
});
[爲什麼是我的變量不變後,我修改它的內部函數?](https://stackoverflow.com/questions/23667086/why-is-my-variable-unaltered-after-i-modify-it-inside-of-a-function-asynchron) –
[我如何返回來自異步調用的響應?](https://stackoverflow.com/questions/14220321/how-do-i-return-the-response-from-an-asynchronous-call) –
'.bind(this)'has沒有相關性e變量;只會影響'this'關鍵字的值。而且,如果您因此收到「9」,您的片段似乎缺乏一些東西。 –