任何人都可以向我解释以下内容。我在全局范围内定义了两个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里面是未定义的。有人可以帮忙吗?
非常感谢, 麦克
答案 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)
foo
未在foo2
中定义,因为您将本地foo
定义为参数:
var foo2 = function (foo) { ...
然后你在没有参数的情况下调用foo2
:
}();
答案 2 :(得分:0)
您正在foo2
在其范围内创建另一个名为foo
的变量,其值为undefined
。如果您想要访问foo
,请使用:
var foo2 = function (foo) {
//code
}(foo);
或从窗口对象访问它:
window.foo