从匿名回调传递值的最简单方法是什么?

时间:2010-08-24 20:18:18

标签: javascript

我仍在尝试理解javascript范围。从匿名回调函数返回值的最简单方法是什么?例如,

var test = 'outside';
callsFunction(function() { test = 'inside'; });
console.log(test);

其中callsFunction调用匿名函数。我想要打印'内部'。

4 个答案:

答案 0 :(得分:2)

我有点困惑,但我相信这就是你追求的目标

function callsFunction( fn )
{
  fn();
}

var test = 'outside';
callsFunction(function() { test = 'inside'; });
console.log(test);

请注意,可以通过()的使用来调用任何函数。但是,有一些特殊方法可以调用来自不同上下文的函数,例如Function.call()Function.apply()

答案 1 :(得分:2)

冒着指出显而易见的风险,在回调之后完成某项工作的最简单方法就是将其简单地包含在回调中(事实上,这就是要走的路):

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

答案 2 :(得分:1)

您想要研究的是JavaScript中的闭包吗?

答案 3 :(得分:0)

你没有在你的问题中定义callsFunction,但如果你使它成为一个自我调用的匿名函数,你可以返回新的'test'值:

var test = 'outside';
(function() { test = 'inside'; })();

console.log(test); // returns 'inside'

如果你确实定义了callFunction:

var test = 'outside';
var callsFunction = function() { 
    test = 'inside';
    return test;
};

console.log(callsFunction()); // returns 'inside'

闭包可能会变得更加复杂。