我有一个承诺,一旦完成,我希望运行我的getContentAll方法:
p_numContentTotal.done(getContentAll);
我还希望将param传递给该方法(脚本的上下文,因为我希望在方法中访问全局变量):
p_numContentTotal.done(getContentAll(ctx));
但是通过添加它,该方法可以立即运行,我该如何解决这个问题呢?
答案 0 :(得分: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));
答案 1 :(得分:1)
通常,您希望无论如何都要封装整个脚本,以控制命名空间。完成后,完成访问脚本当前上下文的目标已经完成。这个'javascript closure'提供了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/