Kapatma, tanımlandığı alandaki değişkenleri ifade eden (kapatan) birinci sınıf bir fonksiyondur. Kapama, tanım kapsamı sona erdikten sonra hala devam ediyorsa, kapattığı değişkenler var olmaya devam edecektir.

Kapatma, tanımlandığı alandaki değişkenleri ifade eden (kapatan) birinci sınıf bir fonksiyondur. Kapama, tanım kapsamı sona erdikten sonra hala devam ediyorsa, kapattığı değişkenler var olmaya devam edecektir.

Javascript'i kapat

JavaScript’teki ana kapanış örneği bir sayaç kullanılarak gösterilebilir:

 function increment () { var count = 0; return function () { // returning function count++; // increment the count return count; }; } var foo = increment(); // foo is now a closure function, where count = 0 foo(); // calls the closure which yields 1 

increment bir kapanma olarak kabul edilmesinin nedeni yerel bir değişken olmasıdır. Bu durumda, foo değişkeni atanırken count korunur. Bu sebat, foo bağlamı ilan edildiğinde foo alındığı için ortaya çıkar.

Kapanmanın kilit noktası, işlev ortamının barındırma nesnesi için "kapalı" olmasıdır.

 var bar = increment(); // bar is now another closure function, with count initialized to 0 bar(); // calls the closure which yields 1, not 2. 

Jquery yakın

Daha pratik bir kapatma örneği, jQuery kütüphanesidir. JQuery'nin kendisi büyük bir kapanış. Aşağıdakileri belirtti:

 var jQuery = (function() { // Here is the closure // Define a local copy of jQuery var jQuery = function( selector, context ) { // The jQuery object is actually just the init constructor 'enhanced'. return new jQuery.fn.init( selector, context, rootjQuery ); }, ... }) ( window ); 

Buna daha yakından bakalım. Bir jQuery kapanışı aslında denilen bir işlev ifadesi veya hemen denilen bir kapanıştır. Orijinal örneğin örneğini alın ve jQuery'nin kullandığı biçimde sunun:

 var foo = (function () { var count = 0; return function () { count++; // Increment the count return count; }; }) (); foo(); // Yields 1 

İlk bakışta, bu orijinal örneğimizden biraz farklı görünüyor, fakat tekrar bakın. Tek fark, bu örneğin parantez içine alınmasıdır. (function () {...}) (); . Bu parantezler, içindekilerin sonucunu döndürür.

İlk parantezler count = 0 ile bir işlev döndürür. Bu, ilk örneğimizdeki increment() çağrısıyla aynıdır ve ikinci parantez grubu return işlevini çağırır.

kaynaklar

Bir programlama dili yapısı olarak kapakların geçmişi, Wikipedia Kapatma sayfasında bulunmaktadır.

Ruby'de kapanmaya bloklar denir.