JavaScript: доступ между двумя функциями, определенными в глобальной области видимости - PullRequest
2 голосов
/ 20 августа 2010

Может кто-нибудь объяснить мне следующее.У меня есть две функции 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 ]

2 голосов
/ 20 августа 2010

Вы создали функцию, которая принимает аргумент с именем 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 голос
/ 20 августа 2010

foo не определено в foo2, поскольку вы определяете локальный foo в качестве параметра:

var foo2 = function (foo) { ...

и вы тогда звоните foo2 без аргументов:

}();
0 голосов
/ 20 августа 2010

Вы заставляете foo2 создать в своей области действия еще одну переменную с именем foo со значением undefined. Если вы хотите получить доступ foo, используйте:

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

или получить доступ к нему из объекта окна:

window.foo
...