如何(function(){})();工作?(Javascript结构)

时间:2014-04-14 10:52:30

标签: javascript

我正在使用an example project,并在使用它并进入JavaScript代码时,我发现了这个功能:

(function ()
{
 ...
 ...
 a lot of code
 ...
 ...
 ...
        scrollToPage : function (page, time) {

        time = time || 0;
        if (page < 0)
            page = 0;
        else if (page > this.pages.length - 1)
            page = this.pages.length - 1;

        this.changeTarget(this.pages[page]);

        this.scrollTo(-page * this.pageWidth, this.y, time);
    }
...
...
})();

我想知道这是如何运作的。为了了解我为什么要使用它,它是因为我想使用此函数之外的scrollToPage函数来导航按钮点击。我在JavaScript中的唯一体验是在Unity3D中,这与我现在尝试的任何网页脚本都非常不同。

所以这样:

(function ()
{
 ...
 ...
 a lot of code
 ...
 ...
 ...
        scrollToPage : function (page, time) {

        time = time || 0;
        if (page < 0)
            page = 0;
        else if (page > this.pages.length - 1)
            page = this.pages.length - 1;

        this.changeTarget(this.pages[page]);

        this.scrollTo(-page * this.pageWidth, this.y, time);
    }
...
...
})();

function myButtonFunction()
{
    scrollToPage(1);
}

2 个答案:

答案 0 :(得分:0)

编写它的方式,你定义一个匿名函数(注意它没有名称),你就是立即调用它。这用于需要在函数中编写代码块并立即调用它的情况。

更新: 在你的例子中,(function(){})()中的代码;当网站启动时,可能会被执行(你需要看到这块代码被放置在网站内的地方)。 实际上,它将一个函数“赋值”给一个对象的成员变量(我想这个代码是你未显示的代码部分中对象声明的一部分,例如var o = {....}) - 想想它将函数设置为新对象的成员变量,以便使用它来调用“内部”函数。稍后,在我的按钮函数中,此变量可用于调用“内部”函数(在outter函数内部具有私有范围)。这用于为稍后在站点内使用按钮分配函数回调。

答案 1 :(得分:0)

现在你可以调用outerFunction(),但是innerFunction()的可见性仅限于outerFunction()的范围,这意味着它对outerFunction()是私有的。它基本上遵循与Javascript中的变量相同的原理