我有一个承诺,完成后我希望运行我的 getContentAll 方法:
p_numContentTotal.done(getContentAll);
我还希望将参数传递给该方法(脚本的上下文,因为我希望访问方法中的全局变量):
p_numContentTotal.done(getContentAll(ctx));
但是通过添加这个,该方法会立即运行,我该如何解决这个问题?
我有一个承诺,完成后我希望运行我的 getContentAll 方法:
p_numContentTotal.done(getContentAll);
我还希望将参数传递给该方法(脚本的上下文,因为我希望访问方法中的全局变量):
p_numContentTotal.done(getContentAll(ctx));
但是通过添加这个,该方法会立即运行,我该如何解决这个问题?
将其包装在匿名函数中:
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));
通常,您无论如何都希望将整个脚本包含在内,以控制命名空间。完成此操作后,就已经完成了访问脚本当前上下文的目标。这个“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/