看看以下代码:
var o;
(function (p) {
p = function () {
alert('test');
};
})(o);
o(); // Error: 'o is not a function'
在上面的函数中,我创建了一个带有一个参数的匿名函数,该函数使用先前创建的作为参数传递的对象进行自调用。 然后我将这个对象指向一个函数(来自新范围内)并最终(尝试)从外部调用它。
我的问题是,如何通过引用传递该参数以更改它指向的指针?
答案 0 :(得分:12)
您可以利用Javascript通过引用传递对象这一事实来实现您想要的效果:
var o = { };
(function (p) {
p.fn = function () {
alert('test');
};
})(o);
o.fn();
答案 1 :(得分:3)
你最好不要按照预期使用这种语言,而不是试图将其弯曲以适应仅在根据不同原则构建的语言中有意义的习语。
var o = (function(p) {
return function() {
alert('test');
};
})();
o();
答案 2 :(得分:1)
当您在示例中传入变量o时,您传递的是未定义的值,而不是对任何内容的引用。你需要做的是发送父对象。在这种情况下,窗口对象(假设您正在使用浏览器)。
(function (p, name) {
p[name] = function() {
alert('test');
};
})(window, "o");
o();
传入window对象和新函数的名称。然后它将您的功能分配给窗口,现在可以调用它。但是,除非你打算使用闭包,否则我建议你直接分配函数。
function o() {
alert('test');
};
o();