创建闭包很容易,但使用它对我来说很困惑。这是我的关闭。一旦我拥有它,我需要能够像doWork,calculateThis,doAnimation等一样调用它上面的操作,但似乎没有办法访问闭包内的函数。
function worker(input) {
return function () {
doWork = function () {
alert("doing work");
};
}
}
function caller() {
var myWorker = worker();
myWorker.doWork(); // this fails
}
*您提出的问题似乎是主观的,可能会被关闭。 - 再次感谢stackoverflow
答案 0 :(得分:4)
我相信这就是你要求的:
function worker(input) {
return {
doWork: function () {
alert("doing work");
},
doAnimation: function() {
alert("animating");
}
}
}
现在可以使用您的代码调用它:
var myWorker = worker();
myWorker.doWork();
myWorker.doAnimation();
请注意,您的代码实际上并没有使用闭包,但是这个闭包:
function worker(input) {
return {
doWork: function () {
alert("doing work: " + input);
},
doAnimation: function() {
alert("animating: " + input);
}
}
}
var workerA = worker('A');
var workerB = worker('B');
workerA.doWork();
workerB.doAnimation();
你能看出差异吗?
答案 1 :(得分:1)
您正在尝试执行方法work(),但在您的示例中,您返回的是函数,而不是具有“work”属性的对象。
以下是您可能会追求的内容:
function worker(input) {
return {
work: function () {
alert("doing work");
};
}
}