【发布时间】:2012-06-24 09:30:54
【问题描述】:
我看了这个:Returning values from nested functions in Javascript
但它并没有真正帮助我(或者我太笨了,无法理解)。
我的变量范围以某种方式关闭,我不明白为什么。我的 alert() 没有按预期运行。试图在所有行上添加 cmets 来解释我的想法。
非常感谢任何 cmets/指针/答案!
var g = {}; / is a large object with all kinds of other stuff and functions in it
g.ding = function(){ // my problem function
var baby = 'young'; // i thought I set a local var here
if(someVar==true) { // standard issue if statement
someAPI.class( // using an API that uses a function as its attribute
function(stuff){ // my anonymous function
baby = 'old'; // setting the var to something
}
);
}
return baby; // returning the var
}
alert( g.ding() ); // i expect it to say "old" but it keeps saying "young". why?
新编辑: Juan 接受的答案很好,但是否还有一种方法可以使用 setTimeout() 来处理异步函数调用并基本上使它们同步?如果任何读过这篇文章的人都知道我很想知道的答案。谢谢。
【问题讨论】:
-
很可能,因为
function(stuff)从未运行过。您的范围界定看起来不错。这里没有任何东西可以证明设置baby="old"的代码行曾经被执行过。someVar可能为 false,或者someAPI永远无法调用您传递给它的函数。 -
好吧,我最初确实用 alert() 检查了这个函数正在被调用。我认为 API 函数的 async 元素是解决方案。
标签: javascript nested scope settimeout anonymous-function