0

我有一个承诺,完成后我希望运行我的 getContentAll 方法:

p_numContentTotal.done(getContentAll);

我还希望将参数传递给该方法(脚本的上下文,因为我希望访问方法中的全局变量):

 p_numContentTotal.done(getContentAll(ctx));

但是通过添加这个,该方法会立即运行,我该如何解决这个问题?

4

2 回答 2

1

将其包装在匿名函数中:

p_numContentTotal.done(function () { getContentAll(ctx) });

或显式推送ctx作为函数的上下文并用于this访问其中的ctx变量:

function getContentAll() {
   console.log(this); //will print your ctx variable
}
p_numContentTotal.done(getContentAll.bind(ctx));
于 2013-11-13T12:14:04.533 回答
1

通常,您无论如何都希望将整个脚本包含在内,以控制命名空间。完成此操作后,就已经完成了访问脚本当前上下文的目标。这个“javascript 闭包”提供了 Artyom 提到的“匿名函数”功能。

你如何包装它取决于你。简单地说,您的整个脚本可能是一个对象、一个函数、一个块或来自文档就绪的回调。最终,这就是让魔法在其他方法中发生的原因。

function main() {
    var ctx = 'current state';
    $("button").click(showContext);
    function showContext() {
        alert(ctx);
    }
}
$(main);

这里的例子:http: //jsfiddle.net/s6VDE/1/

请注意,这会保留参考访问权限(可能是也可能不是您想要的),如此处所示:http: //jsfiddle.net/s6VDE/5/

于 2013-11-13T12:49:21.017 回答