在JavaScript中将参数作为指针传递

在JavaScript中将参数作为指针传递,javascript,pointers,Javascript,Pointers,请看下面的代码: var o; (function (p) { p = function () { alert('test'); }; })(o); o(); // Error: 'o is not a function' 在上面的函数中,我创建了一个匿名函数,该函数接受一个参数,该参数使用以前创建的对象作为参数进行自调用。 然后我将这个对象指向一个函数(从新范围内),并最终(尝试)从外部调用它 我的问题是,如何“通过引用”传递该参数以更改其指向的指针?通过

请看下面的代码:

var o;

(function (p) {
    p = function () {
        alert('test');
    };
})(o);

o(); // Error: 'o is not a function'
在上面的函数中,我创建了一个匿名函数,该函数接受一个参数,该参数使用以前创建的对象作为参数进行自调用。 然后我将这个对象指向一个函数(从新范围内),并最终(尝试)从外部调用它


我的问题是,如何“通过引用”传递该参数以更改其指向的指针?

通过利用Javascript通过引用传递对象的事实,您可以达到想要的效果:

var o = { };

(function (p) {
    p.fn = function () {
        alert('test');
    };
})(o);

o.fn();

在示例中,当您传入变量o时,您传递的是一个未定义的值,而不是对任何内容的引用。您需要做的是将对象发送到父对象。在本例中,窗口对象(假设您使用的是浏览器)

这将传入窗口对象和新函数的名称。然后它将您的函数分配给窗口,现在可以调用它了。但是,除非您打算使用闭包,否则我建议直接分配函数

function o() {
    alert('test');
};
o();

您最好按照预期使用该语言,而不是试图将其弯曲以适应仅在根据不同原则构建的语言中才有意义的习语

var o = (function(p) {
    return function() {
        alert('test');
    };
})();

o();

实际上,“通过引用传递”在JavaScript中有点用词不当。相对于其他具有真正“引用”类型的语言,JavaScript不通过引用传递任何内容。它总是按值传递。这个值可能包含一个引用,这就是我想你想说的。我之所以使用上述习惯用法,是因为,如果我想更改主对象的名称(
o
),我只需要从第1行(
var o;
)和作为参数传递它的部分(
})(o)进行更改);我不需要更改匿名函数中的任何内容。
var o = (function(p) {
    return function() {
        alert('test');
    };
})();

o();