gpt4 book ai didi

javascript - 使用模块模式,为什么引用未定义?

转载 作者:行者123 更新时间:2023-12-03 11:51:33 24 4
gpt4 key购买 nike

我正在尝试实现模块化模式:

var mod1, mod2;
mod1 = (function (mod2) {
var obj = {};
obj.whichMod = function () {
mod2.whichMod();
};
return obj;
}(mod2));

mod2 = (function (mod1) {
var obj = {};
obj.whichMod = function () {
console.log('mod2');
}
return obj;
}(mod1));


mod1.whichMod();

当我调用 mod1.whichMod() 方法时,它说 mod2 不是未定义的。为什么是这样?

我希望 mod1.whichMod() 调用 mod2.whichMod() 但 mod2 应该在 mod1 之后“定义”,如上所示。

最佳答案

问题是您正在使用立即执行的闭包。这是采用新的“obj”并放置“未定义”mod2并将其填充到whichMod函数中。当您稍后调用该函数时,它无法更新其 undefined reference 。 'this' 起作用的原因是因为您返回的是实际的闭包,该闭包可以访问您稍后定义的 mod2 变量。这允许更新 mod2。以下是未更新的示例。

jsFiddle:http://jsfiddle.net/lookitstony/fzsodx85/

var mod1, mod2;
mod2 = {};
mod2.whichMod = function(){ console.log('first') };

mod1 = (function (mod2) {
var obj = {};
obj.whichMod = function () {
mod2.whichMod();
};
return obj;
}(mod2));

mod2 = (function (mod1) {
var obj = {};
obj.whichMod = function () {
console.log('mod2');
}
return obj;
}(mod1));

$(function(){
mod1.whichMod(); // mod2 did not exist so its using the one defined above
mod2.whichMod(); // mod2 is now overwritten but....
mod1.whichMod(); // mod1 still has the original object passed in
});

关于javascript - 使用模块模式,为什么引用未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25813572/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com