首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JavaScript生命

JavaScript生命
EN

Stack Overflow用户
提问于 2014-02-14 14:07:58
回答 1查看 208关注 0票数 0

我承认当谈到JavaScript的时候,我很绿,但是每次我想我得到它的时候,都会有一些奇怪的曲线球把我甩了,这一点也没有帮助。

我有一个像这样的js文件:

代码语言:javascript
复制
(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,它会像这样吗?

代码语言:javascript
复制
onclick="myiife.myFunction(1)"

我读过一些关于范围的东西,但很明显,在我对这一切的理解中,我仍然缺少一些非常基本的东西。

从我看到的示例中,我没有看到其他人似乎必须在函数名前加上iife名称才能从页面执行内容。

任何好的推荐阅读也将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-14 14:22:29

Javascript (至少在浏览器中)的全局范围是window。因此,您所做的就是将myiife附加到窗口,而myiffe有一个名为myFunction的函数。因此,如果您想从全局范围(即window)调用它,那么当然需要指定myiffe.myFunction()

你可能看到其他人所做的是这样的:

代码语言:javascript
复制
var myFunction = (function() {
    var counter = 0;
    return function() {
        counter++;
        console.log(counter);
    };
})()

在他们有生命的地方,返回一些东西(在这种情况下,是一个函数,在其他情况下,人们会返回一个对象)。在这种情况下,因为myFunction是一个全局变量,所以他们可以使用myFunction()来调用它。他们在生活中所取得的成就基本上是使counter变量成为私有的。只有生活中的东西才能接触到它。

当然,如果您不在IIFE中定义myFunction,那么它只是全局作用域中的一个函数,可以直接从全局范围调用。

代码语言:javascript
复制
 function myFunction() {
     // do something
 }

 myFunction();

但是对于您在事件处理程序中使用此操作的问题,更好的做法是首先不要在HTML中内联事件处理程序,而是将其绑定到代码中。这给您提供了更多的灵活性、更清晰的分离和更可维护的代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21781551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档