簡體   English   中英

為什么要將一個變量賦給一個匿名函數並在該函數中重新定義它?

[英]Why assign a variable to an anonymous function and redefine it again in that function?

我一直在努力提高我的JavaScript技能,並且我已經知道在匿名函數中包含腳本的優點是使其自我調用並保持變量和內部函數的私有性。

但是,將一個匿名函數分配給一個變量,然后在該函數內部再次使用與空對象相同的變量是什么意思呢? 要清除它嗎?

並且在函數結束時return的目的是什么?

var app = (function () {
    'use strict';

    var app = {};

    //more code

    return app;
})();

正如您所提到的,您使用此語法來創建閉包,因此您可以將變量保持為私有和公開,並將Interface作為API保留,那么為什么要將對象返回並清空或填充到閉包中?這可以作為要使用的公共方法,這有助於避免API與外部API(libs)之間的上下文沖突。

var api = (function(jqueryRef){
                   var $ = {
                      addClass: jqueryRef.addClass,
                      yourOwnAddClassFn: ...
                    };
                    return $;
                 })($);

如您所見,您可以將jquery引用作為參數傳遞,並可以將其用於閉包,然后您可以將$ common jquery命名空間用於您的API而不會發生沖突。

您正在尋找的是scope 看看這個來自scotch.io的例子:

// global scope (scopeA)
var Module = (function() {
    // scope is now everything in this function (scopeB)
    function privateMethod() {
        console.log('privateMethod called!')
    }

    return {
        publicMethod: function() {
            // this function has access to scopeB 
            console.log('publicMethod called!');
            privateMethod();
        }
    };
})();


Module.publicMethod(); // gives publicMethod called!
Module.privateMethod(); // Uncaught ReferenceError: privateMethod is not defined

蘇格蘭威士忌對此的解釋實際上非常好,所以我只想引用它:

Module的return語句包含我們的公共函數。 私有函數只是那些沒有返回的函數。 不返回函數使它們在Module名稱空間之外無法訪問。 但是我們的公共函數可以訪問我們的私有函數,這些函數使得它們可以方便地用於輔助函數,AJAX調用和其他東西。

我希望這能為你解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM