JavaScript:在全局范围内定义的两个函数之间的访问

时间:2010-08-20 16:00:22

标签: javascript jquery function scope global

任何人都可以向我解释以下内容。我在全局范围内定义了两个JavaScript函数,如下所示:

    var foo = function () {
        var that = this;

        that.toString = function () { return "foobar" };

        return that;
    }();

    alert(foo.toString());

    var foo2 = function (foo) {
        var that;

        that = $.extend(true, {}, foo);

        return that;
    }();

警告foo.toString()正如我所期望的那样,因为foo被赋予了调用函数的结果。但是我希望foo2可以访问foo。然而在foo2 foo里面是未定义的。有人可以帮忙吗?

非常感谢, 麦克

3 个答案:

答案 0 :(得分:2)

您创建了一个接受名为 foo 的参数的函数。此局部变量将覆盖同名的全局变量。如果您没有为此参数传递任何内容,则本地 foo 将自动设置为 undefined 。您可以删除参数或传递全局 foo

var foo2 = function (foo) {
    var that;

    that = $.extend(true, {}, foo); // foo is from the local scope

    return that;
}(foo); // Pass in foo

或者

var foo2 = function () { // remove the argument
    var that;

    that = $.extend(true, {}, foo); // foo is from the global scope

    return that;
}();

答案 1 :(得分:1)

{p> foo未在foo2中定义,因为您将本地foo定义为参数:

var foo2 = function (foo) { ...

然后你在没有参数的情况下调用foo2

}();

答案 2 :(得分:0)

您正在foo2在其范围内创建另一个名为foo的变量,其值为undefined。如果您想要访问foo,请使用:

var foo2 = function (foo) {
  //code
}(foo);

或从窗口对象访问它:

window.foo