A 'Kapatılması nedir'?
Tımar hakkında bir soru sordum ve kapanışları bahsedildi. Kapatma nedir? Tımar nasıl bir ilişkisi var?
CEVAP
Değişken kapsamı
Yerel bir değişken bildirdiğinizde, bu değişken bir kapsamı vardır. Genellikle yerel değişkenler, bunları bildirmek blok veya işlevi yalnızca içinde var.
function() {
var a = 1;
console.log(a); // works
}
console.log(a); // fails
Eğer yerel bir değişken erişmek için çalışırsanız, çok dil kökü kapsamında ulaşana kadar geçerli kapsamda, üst kapsamları ile bakacaktır.
var a = 1;
function() {
console.log(a); // works
}
console.log(a); // works
Bir blok ya da işlevi ile bitince, yerel değişkenler artık gerekli ve genellikle bellek uçtu.
Bu normalde işler bekliyoruz.
Bir kapatma kalıcı bir yerel değişken bir kapsamı vardır
Bir kapatma kodu yürütülmesi blok dışına taşındı sonra bile yerel değişkenler için tutar olan kalıcı bir kapsamı vardır. Dil desteği kapatılması (gibi JavaScript, Hızlı ve Ruby) izin tutmak için bir başvuru için bir kapsam (dahil olmak üzere üst scopes), sonra bile blok bu değişkenler olduğunu ilan etti bitirdi yürütmek, sağlanan duruyorsun başvuru blok veya işlevi bir yerde.
Kapsam nesne, ve tüm yerel değişkenler işlev bağlıdır, ve bu işlevi devam ettiği sürece devam edecek.
Bu taşınabilirlik bize işlevini verir. Eğer tamamen farklı bir bağlamda işlevi ararsak bile işlevi ilk tanımlanan kapsamda tüm değişkenleri hala biz daha sonra işlev çağrısı kapsamında olmasını bekliyoruz biz.
Örneğin
İşte bu noktayı gösterir JavaScript çok basit bir örnek:
outer = function() {
var a = 1;
var inner = function() {
alert(a);
}
return inner; // this returns a function
}
var fnc = outer(); // execute outer to get inner
fnc();
Burada bir fonksiyon içerisinde bir fonksiyon tanımlıyorum. İç işlevi dış işlevin bütün yerel değişkenleri a
da dahil olmak üzere erişim kazanır. 7* *değişken iç işlevi için kapsam.
Normalde bir işlevi, tüm yerel değişkenler darmadağın olup çıkar. Biz ancak, iç işlev döndürme ve atama bir değişken için outer
çıktıktan sonra devam ederse fnc
,,inner
tanımlanan kapsam içinde tüm değişkenleri de geçerli. a
-- kapatıldı değişken bir kapanma içinde.
12 ** değişken fnc
tamamen özel olduğunu unutmayın. Bu JavaScript gibi fonksiyonel bir programlama dilinde özel değişkenler oluşturma bir yoludur.
Tahmin edebileceğini gibi fnc()
diyorum ki a
, değeri uyarıları "1".
Kapatma olmadan bir dilde, 16* *değişken işlev outer
çıkıldığı zaman, çöp toplama ve çöpe atıldı. Fnc arama a
artık yok, çünkü bir hata atardı
JavaScript, a
değişken kapsamı işlevi ilk ilan oluşturulur çünkü kalır ve işlev olarak devam ederse değişken var olmaya devam ediyor.
a
outer
kapsamı aittir. inner
kapsamı outer
kapsamında üst bir işaretçi var. fnc
25* *gösteren bir değişkendir. a
fnc
devam ettiği sürece devam eder. a
kapatılmasıyla.
A 'Kapatılması nedir'?...
Nesne Dilimleme nedir?...
'hesabı' Yerel Sistem ve �...
Tam olarak LLVM nedir?...
En iyi yolu d3.js görselleştirme bir d...