我已经阅读和测试下面的代码几个小时了,但我似乎无法理解某些事情。
我一直在逐步浏览 chrome 控制台,基本上在我可以添加的每一行中都插入了中断,并且一直在检查,但我只是不确定事情
1)我只是不确定 deps 数组的用途。对我来说第一件奇怪的事情是,为什么脚本不尝试在第一次调用它时添加数据(来自MyModules.define("bar",[],function()
)?
为什么脚本会第二次调用define(MyModules.define("foo",["bar"], function(bar)
)然后将 ["bar"] 添加到数组中,而第一个定义应该首先完成它?
2)这段代码modules[name] = impl.apply(impl,deps)
。每个回调,不要使用“this”..所以这里有必要应用吗?另外,这可能是我对使用“apply”时的回调缺乏理解,但是如何理解这一点呢?我认为“申请”通常是functionName.apply(obj,[])
在这种情况下,这几乎就像是说functionName.apply(functionName, []) ??
或者这是不同的,因为函数本身是匿名的?
var MyModules = (function Manager() {
var modules = {};
function define(name,deps,impl) {
for ( var i=0; i<deps.length; i++) {
deps[i] = modules[deps[i]];
}
modules[name] = impl.apply(impl,deps);
}
function get(name) {
return modules[name];
}
return {
define : define,
get: get
};
})();
MyModules.define("bar",[],function() {
function hello(who) {
return "Let me introduce: " + who;
}
return {
hello : hello
};
})
MyModules.define("foo",["bar"], function(bar) {
var hungry = "hippo";
function awesome() {
console.log(bar.hello(hungry).toUpperCase() );
}
return {
awesome: awesome
};
});
var bar = MyModules.get("bar");
var foo = MyModules.get("foo");
console.log(bar.hello("hippo"));
foo.awesome();