سؤال

هذا السؤال لديه بالفعل إجابة هنا:

(function() {

  //do stuff

})();

تحرير: اعتقدت في الأصل أن هذا البناء كان يسمى الإغلاق - وليس أن التأثير الذي تسبب في نتائج (يحتمل) في الإغلاق - إذا تم التقاط المتغيرات.

هذا ليس له علاقة بسلوك الإغلاق بأنفسهم - هذا أفهمه تمامًا ولم يكن ما تم طلبه.

هل كانت مفيدة؟

المحلول

إنها وظيفة مجهولة (أو بدقة أكثر وظيفة مجهولة المصدر) التي يتم تنفيذها على الفور.

إن استخدام أحدهما هو أن أي متغيرات ووظائف يتم الإعلان عنها فيها يتم تحديدها لتلك الوظيفة ، وبالتالي فهي مخبأة عن أي سياق عالمي (لذلك يمكنك الحصول على تغليف وإخفاء المعلومات).

نصائح أخرى

إنها وظيفة مجهولة ولكنها ليست إغلاقًا نظرًا لعدم وجود إشارات إلى النطاق الخارجي

http://www.jibbering.com/faq/notes/closures/

عادة ما أسميها شيئًا مثل "الاحتجاج الفوري لوظيفة مجهولة".

أو أكثر بكل بساطة ، "وظيفة التركيز على الذات".

نوعا من. إنه لا يغلق حقًا أي شيء ، ويسمى على الفور ، لذلك فهي مجرد وظيفة مجهولة.

خذ هذا الرمز:

function foo() {
    var a = 42;
    return function () {
        return a;
    }
}

var bar = foo();
var zab = bar();
alert(zab);

هنا الوظيفة التي تم إرجاعها بواسطة FOO () هي إغلاق. يغلق حول المتغير. على الرغم من أن من شأنه أن يخرج من النطاق منذ فترة طويلة ، إلا أن استدعاء الإغلاق عن طريق تسميته لا يزال بإرجاع القيمة.

لا ، الإغلاق هو شيء على طول هذه الخطوط:

function outer()
{
    var variables_local_to_outer;

    function inner()
    {
        // do stuff using variables_local_to_outer
    }

    return inner;
}

var closure = outer();

يحتفظ الإغلاق بالإشارة إلى المتغيرات المحلية إلى الوظيفة التي أعادتها.

يحرر: يمكنك بالطبع إنشاء إغلاق باستخدام وظائف مجهولة:

var closure = (function(){

    var data_private_to_the_closure;

    return function() {
        // do stuff with data_private_to_the_closure
    }

})();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top