我仍然試圖理解JavaScript範圍。從匿名回調函數返回值的最簡單方法是什麼?例如,從匿名回調中傳遞值的最簡單方法?
var test = 'outside';
callsFunction(function() { test = 'inside'; });
console.log(test);
其中callsFunction調用匿名函數。我希望打印'裏面'。
我仍然試圖理解JavaScript範圍。從匿名回調函數返回值的最簡單方法是什麼?例如,從匿名回調中傳遞值的最簡單方法?
var test = 'outside';
callsFunction(function() { test = 'inside'; });
console.log(test);
其中callsFunction調用匿名函數。我希望打印'裏面'。
我有點困惑,但我相信這是你以後
function callsFunction(fn)
{
fn();
}
var test = 'outside';
callsFunction(function() { test = 'inside'; });
console.log(test);
注意,任何功能可以通過的()
使用調用在做什麼。不過,也有特殊的方法從不同的上下文中調用的功能,如Function.call()和Function.apply()
在指出了明顯的風險,有一些回調後做的最簡單的方法是簡單地將其包括在回調(而這,其實要走的路):
var test = 'outside';
callsFunction(function() {
test = 'inside';
console.log(test);
});
一個真實的例子:假設您想更新的文件從一個Ajax調用的內容的DIV。
Ajax('file.html', function (data) {
// Update the div here
document.getElementById('d').innerHTML = data;
});
// Not here
謝謝,但我確實在回調上下文之外使用它。 – Tristan 2010-08-24 20:30:03
你打算如何使用它?也許發佈一些實際的代碼? – 2010-08-24 20:33:27
您應該創建一個單獨的方法來完成常規工作,並從回調以及您需要的任何地方調用它。 – 2010-08-24 21:18:50
也許你是想研究什麼是JavaScript的關閉?
你沒有在你的問題定義callsFunction,但如果你把它自調用匿名函數,可以返回新的「測試」值:如果你定義callsFunction
var test = 'outside';
(function() { test = 'inside'; })();
console.log(test); // returns 'inside'
:
var test = 'outside';
var callsFunction = function() {
test = 'inside';
return test;
};
console.log(callsFunction()); // returns 'inside'
您可以通過關閉更復雜。
嗯,不知道我明白這個問題,你能否詳細說明你的例子? – nicomen 2010-08-24 20:19:57
我相信匿名函數的作用域被定義在callsFunction被定義的任何地方,並且可能無法訪問測試變量。 – Tristan 2010-08-24 20:22:46