例如,jQuery的代码以(function(){
开头,因此它的功能不能从外部文件访问,但它们如何使它们可访问?
我尝试创建1.js,2.js
,这里是1.js的代码
(function(){
'use strict';
function aa(){
alert();
console.log('a');
return 1;
}
})();
和2.js
function b(){
aa();
}
现在,当我运行b()
时,它会返回找不到aa()
的错误,即使我将它们都添加到HTML文件中。
答案 0 :(得分:1)
首先,您似乎对jQuery如何编写与使用的方式感到困惑。 $(function () { })
是使用 jQuery的一种方式(并且它不是IIFE,BTW)。
其次,jQuery是可访问的,因为它将$
和jQuery
(它们都指向相同的东西)分配给window
。它的所有方法都是$
对象的属性。
你可以做同样的事情:
(function() {
'use strict';
function aa() {
alert();
console.log('a');
return 1;
}
function ab() {
return 2;
}
window.myStuff = {
aa: aa,
ab: ab
};
})();
(function() {
function b() {
var sum = myStuff.aa() + myStuff.ab();
console.log(sum);
}
b();
})();

答案 1 :(得分:0)
IIFE是与其他任何功能相同的功能。这意味着您可以像在任何其他函数中一样将参数传递给IIFE,例如:
(function(num) { console.log(num * 2); })(3); // logs 6
但是,您不仅可以像我上面那样传递数字,还可以传入对象:
(function(obj) {
console.log(obj.foo + 1); // logs 124
})({ foo: 123 });
由于您可以传递对象,因此您还可以传递指向对象的变量:
var outsideObj = { foo: 123 };
(function(insideObj) {
insideObj.foo = insideObj.foo + 1;
})(outsideObj);
console.log(outsideObj.foo); // logs 124
请注意,在JavaScript中,window
变量是全局,它是一个对象。罗,看哪:
(function(insideObj) {
insideObj.example = function() {
console.log('example called');
};
})(window);
window.example(); // logs 'example called'
所以,要点是传入一个对象,然后在IIFE中修改对象。