我仍然试图理解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