我承认当谈到JavaScript的时候,我很绿,但是每次我想我得到它的时候,都会有一些奇怪的曲线球把我甩了,这一点也没有帮助。
我有一个像这样的js文件:
(function (myiife, $) {
var myArrayOfThings = [];
myiife.myFunction = function (id) {
var cachedThing = myiife.getFromArray(id);
if (cachedThing === null) {
// get from server
} else {
// do something with cached item
}
};
myiife.getFromArray = function (idToFind) {
for (var i = 0, len = myArrayOfThings; i < len; i++) {
if (myArrayOfThings[i].Id=== idToFind) {
return myArrayOfThings[i]; // Return as soon as the object is found
}
}
return null;
};
}(window.myiife= window.myiife|| {}, jQuery));真正让我困惑的是,怎样才能让我想到什么才是最合适的。我想我还不太明白事情的范围,我很难说实话。
如果我想从页面调用myFunction,它会像这样吗?
onclick="myiife.myFunction(1)"我读过一些关于范围的东西,但很明显,在我对这一切的理解中,我仍然缺少一些非常基本的东西。
从我看到的示例中,我没有看到其他人似乎必须在函数名前加上iife名称才能从页面执行内容。
任何好的推荐阅读也将不胜感激。
发布于 2014-02-14 14:22:29
Javascript (至少在浏览器中)的全局范围是window。因此,您所做的就是将myiife附加到窗口,而myiffe有一个名为myFunction的函数。因此,如果您想从全局范围(即window)调用它,那么当然需要指定myiffe.myFunction()。
你可能看到其他人所做的是这样的:
var myFunction = (function() {
var counter = 0;
return function() {
counter++;
console.log(counter);
};
})()在他们有生命的地方,返回一些东西(在这种情况下,是一个函数,在其他情况下,人们会返回一个对象)。在这种情况下,因为myFunction是一个全局变量,所以他们可以使用myFunction()来调用它。他们在生活中所取得的成就基本上是使counter变量成为私有的。只有生活中的东西才能接触到它。
当然,如果您不在IIFE中定义myFunction,那么它只是全局作用域中的一个函数,可以直接从全局范围调用。
function myFunction() {
// do something
}
myFunction();但是对于您在事件处理程序中使用此操作的问题,更好的做法是首先不要在HTML中内联事件处理程序,而是将其绑定到代码中。这给您提供了更多的灵活性、更清晰的分离和更可维护的代码。
https://stackoverflow.com/questions/21781551
复制相似问题