JavaScript değişkenleri kapsamı nedir?
Javascript değişkenleri kapsamı nedir? Dışarıda bir işlevi yerine aynı kapsam içinde var mı? Ya da bunun bir önemi var mı? Ayrıca, nerede değişkenler global olarak tanımlanır saklı?
CEVAP
Yapabileceğim en iyi çalışması için örnek bir sürü vermek olduğunu düşünüyorum. Javascript programcılar neredeyse kapsamı ne kadar iyi anladıklarını tarafından sıralanmaktadır. Zaman zaman oldukça mantıksız olabilir.
Genel kapsamlı bir değişken
var a = 1; // global scope function one() { alert(a); }
Yerel kapsamı
var a = 1; function two(a) { alert(a); } // local scope again function three() { var a = 3; alert(a); }
Ara:JavaScript bloğu kapsamı diye bir şey yoktur(ES5; ES6
let
tanıtır)var a = 1; function four() { if (true) { var a = 4; } alert(a); // alerts '4', not the global value of '1' }
Ara:Nesne özellikleri
var a = 1; function five() { this.a = 5; }
Gelişmiş:Kapatma
var a = 1; var six = (function() { var a = 6; return function() { // JavaScript "closure" means I have access to 'a' in here, // because it is defined in the function in which I was defined. alert(a); }; })();
Gelişmiş:Prototip tabanlı kapsam çözümlemesi
var a = 1; function seven() { this.a = 7; } // [object].prototype.property loses to // [object].property in the lookup chain. For example... // Won't get reached, because 'a' is set in the constructor above. seven.prototype.a = -1; // Will get reached, even though 'b' is NOT set in the constructor. seven.prototype.b = 8;
Tamamen
// These will print 1-8 one(); two(2); three(); four(); alert(new five().a); six(); alert(new seven().a); alert(new seven().b);
Küresel Yerel:Ekstra karmaşık bir Durum
var x = 5; (function () { console.log(x); var x = 10; console.log(x); })();
Bu baskı
undefined
10
yerine5
10
JavaScript beri hep hamle değişken bildirimleri (başlatmaları) üst kapsamı, yapım kodu eşdeğeri:var x = 5; (function () { var x; console.log(x); x = 10; console.log(x); })();
Fıkra kapsamı değişken yakalamak
var e = 5; console.log(e); try { throw 6; } catch (e) { console.log(e); } console.log(e);
Bu, *,
5
*26 25**dışarı yazdırır. Catch tümcesi içindee
global ve yerel değişkenler gölgeler. Ama bu özel kapsam yalnızca yakalandı değişkeni için. Eğer catch tümcesi içindevar f;
yazarsanız, o zaman tam olarak eğer daha önce tanımlanmış olsaydı ya da try-catch bloğundan sonra aynı şey.
&Quot;sıkı" kullanın; JavaScript, ...
'' JavaScript anahtar kelime...
Bu nedir !! JavaScript? (değil) operat...
Bu tuhaf davranışları JavaScript '...
Bir Dizi hassas kaybetmeden git o Java...