JavaScript'te "kat─▒ kullan─▒m─▒" ne yapar ve bunun arkas─▒ndaki sebep nedir?


Al─▒nan cevaba git


Son zamanlarda, baz─▒ JavaScript kodlar─▒m─▒ Crockford's JSLint arac─▒l─▒─č─▒yla ├žal─▒┼čt─▒rd─▒m ve a┼ča─č─▒daki hatay─▒ verdi:

1. sat─▒rdaki sorun 1. karakter: "use strict" ifadesinin eksik olmas─▒.

Biraz arama yaparak, baz─▒ ki┼čilerin "use strict"; JavaScript kodlar─▒n─▒ eklediklerini fark ettim . ─░fadeyi ekledi─čimde hata g├Âr├╝nmedi. Maalesef, Google bu yayl─▒ ifadenin arkas─▒ndaki ge├žmi┼čin ├žo─čunu a├ž─▒klamad─▒. Kesinlikle, JavaScript'in taray─▒c─▒ taraf─▒ndan nas─▒l yorumland─▒─č─▒ ile ilgisi olmal─▒, ancak etkinin ne olaca─č─▒ konusunda hi├žbir fikrim yok.

├ľyleyse "use strict"; t├╝m bunlar ne ile ilgili, ne anlama geliyor ve hala ilgili m─▒?

Ge├žerli taray─▒c─▒lardan herhangi biri "use strict"; dizeye yan─▒t veriyor mu yoksa ileride kullanmak ├╝zere mi?


7297









Cevap say─▒s─▒n─▒ say: 27






Javascript S─▒k─▒ Modu ile ilgili bu makale ilginizi ├žekebilir: John Resig - ECMAScript 5 S─▒k─▒ Modu, JSON ve Daha Fazlas─▒

Baz─▒ ilgin├ž k─▒s─▒mlar─▒ al─▒nt─▒lamak i├žin:

S─▒k─▒ Mod, ECMAScript 5'teki bir program veya bir i┼člevi "kat─▒" bir i┼čletim ba─člam─▒nda yerle┼čtirmenize olanak sa─člayan yeni bir ├Âzelliktir. Bu kat─▒ ba─člam belirli eylemlerin al─▒nmas─▒n─▒ ├Ânler ve daha fazla istisna atar.

Ve:

S─▒k─▒ mod birka├ž ┼čekilde yard─▒mc─▒ olur:

  • ─░stisnalar─▒ da─č─▒tan baz─▒ kodlama kodlay─▒c─▒lar─▒ yakalar.
  • G├Âreceli olarak "g├╝vensiz" eylemler ger├žekle┼čtirildi─činde (k├╝resel nesneye eri┼čim kazanma gibi) hatalar─▒ ├Ânler veya f─▒rlat─▒r.
  • Kafa kar─▒┼čt─▒r─▒c─▒ veya k├Ât├╝ d├╝┼č├╝n├╝lm├╝┼č ├Âzellikleri devre d─▒┼č─▒ b─▒rak─▒r.

Ayr─▒ca t├╝m dosyaya "kat─▒ kip" uygulayabilece─činizi unutmay─▒n ... Ya da yaln─▒zca belirli bir i┼člev i├žin kullanabilirsiniz (yine de John Resig'in makalesinden al─▒nt─▒ yaparak) :

 // Non-strict code...

(function(){
  "use strict";

  // Define your library strictly...
})();

// Non-strict code... 
 

Eski ve yeni kodu kar─▒┼čt─▒rman─▒z gerekirse, hangisi yararl─▒ olabilir ;-)

Bu y├╝zden "use strict" Perl'de kullanabilece─čin bir ┼čey oldu─čunu d├╝┼č├╝n├╝yorum (bu y├╝zden isim?) : K─▒r─▒lmalara yol a├žabilecek daha fazla ┼čey tespit ederek daha az hata yapman─▒za yard─▒mc─▒ olur.

S─▒k─▒ mod ┼čimdi t├╝m b├╝y├╝k taray─▒c─▒lar taraf─▒ndan desteklenmektedir .

─░├žinde yerli ECMAScript mod├╝lleriyle (ile import ve export ifadeleri) ve ES6 s─▒n─▒flar─▒ , kat─▒ mod her zaman etkindir ve engelli olamaz.


4789







Bu ECMAScript 5'in yeni bir ├Âzelli─či. John Resig bunun g├╝zel bir ├Âzetini yazd─▒ .

Sadece JavaScript dosyalar─▒n─▒za (dosyan─▒z─▒n en ├╝st├╝nde veya bir i┼člevin i├žinde) koydu─čunuz bir dize ┼čuna benzer:

 "use strict";
 

┼×imdi kodunuza koymak, sadece bir dize oldu─ču i├žin mevcut taray─▒c─▒larda herhangi bir soruna neden olmamal─▒d─▒r. Kodunuz pragmay─▒ ihlal ederse ileride kodunuzla ilgili sorunlara neden olabilir. ├ľrne─čin, ┼ču anda ilk ├Ânce foo = "bar" tan─▒mlamad─▒ysan─▒z foo , kodunuz ba┼čar─▒s─▒z olmaya ba┼člayacak ... bence bu iyi bir ┼čey.


1206


2009-08-26





Bu ifade "use strict"; , taray─▒c─▒ya JavaScript'in azalt─▒lm─▒┼č ve daha g├╝venli bir ├Âzellik k├╝mesi olan S─▒k─▒ modunu kullanmas─▒ talimat─▒n─▒ verir.

├ľzelliklerin listesi (ayr─▒nt─▒l─▒ olmayan)

  1. Global de─či┼čkenlere izin verilmez. ( var De─či┼čken isimlerinde eksik beyanlar─▒ ve yaz─▒m hatalar─▒n─▒ yakalar )

  2. Sessiz ba┼čar─▒s─▒zl─▒k atamalar─▒ kat─▒ modda hata verir (atama NaN = 5; )

  3. Silinemeyen ├Âzellikleri silme giri┼čimleri f─▒rlat─▒lacak ( delete Object.prototype )

  4. Nesne de─či┼čmezindeki t├╝m ├Âzellik adlar─▒n─▒n benzersiz olmas─▒n─▒ gerektirir ( var x = {x1: "1", x1: "2"} )

  5. ─░┼člev parametre adlar─▒ benzersiz ( function sum (x, x) {...} ) olmal─▒d─▒r

  6. Sekizli s├Âzdizimini yasaklar ( var x = 023; baz─▒ ayg─▒tlar hatal─▒ bir ┼čekilde ├Ânceki s─▒f─▒ra say─▒y─▒ de─či┼čtirmek i├žin hi├žbir ┼čey yapmad─▒─č─▒n─▒ varsaymaktad─▒r.)

  7. with Anahtar kelimeyi yasaklar

  8. eval s─▒k─▒ modda yeni de─či┼čkenler getirmez

  9. D├╝z adlar─▒ silmeyi yasaklar ( delete x; )

  10. ─░simlerin ciltlenmesini veya atanmas─▒n─▒ eval ve arguments herhangi bir bi├žimde verilmesini yasaklar.

  11. S─▒k─▒ mod, arguments nesnenin ├Âzelliklerini bi├žimsel parametrelerle de─či┼čtirmez. (yani, function sum (a,b) { return arguments[0] + b;} Bu i┼če yar─▒yor, ├ž├╝nk├╝ buna arguments[0] ba─čl─▒ a ve b├Âyle.)

  12. arguments.callee desteklenmiyor

[Ref: S─▒k─▒ mod , Mozilla Geli┼čtirici A─č─▒ ]


621







─░nsanlar kullanmaktan endi┼če use strict ediyorlarsa, bu makaleyi incelemeye de─čer olabilir:

ECMAScript 5 'S─▒k─▒ mod' taray─▒c─▒larda desteklenir. Ne anlama geliyor?
NovoGeek.com - Krishna'n─▒n blogu

Taray─▒c─▒ deste─či hakk─▒nda konu┼čuyor, ancak daha da ├Ânemlisi g├╝venli bir ┼čekilde nas─▒l ba┼ča ├ž─▒k─▒laca─č─▒:

 function isStrictMode(){
    return !this;
} 
/*
   returns false, since 'this' refers to global object and 
   '!this' becomes false
*/

function isStrictMode(){   
    "use strict";
    return !this;
} 
/* 
   returns true, since in strict mode the keyword 'this'
   does not refer to global object, unlike traditional JS. 
   So here, 'this' is 'undefined' and '!this' becomes true.
*/
 

400







Dikkatli bir ┼čekilde, t├╝m zorlay─▒c─▒ programlay─▒c─▒lar: "use strict" mevcut yasalara ba┼čvurmak tehlikeli olabilir! Bu, 'daha iyi' yapmak i├žin kodun ├╝zerine tokatlayabilece─činiz iyi hissetmenizi sa─člayan, mutlu bir y├╝z etiketi de─čildir. ─░le "use strict" pragma, taray─▒c─▒ aniden varsay─▒lan / gev┼ček JavaScript mutlu izin verdi─čini bu noktada bir ┼čey yap─▒yorsun s─▒rf daha ├Ânce att─▒ asla rastgele yerlerde istisnalar ama s─▒k─▒ bir JavaScript tiksinen ATMAK olacak! Kodunuzda nadiren kullan─▒lan ├ža─čr─▒lar─▒ gizleyen kesinlikte ihlaller olabilir; bu, yaln─▒zca sonu├žta ├žal─▒┼čt─▒r─▒ld─▒─č─▒ zaman bir istisna olu┼čturacak - ├Ârne─čin, ├Âdeme yapan m├╝┼čterilerinizin kulland─▒─č─▒ ├╝retim ortam─▒nda!

"use strict" Dalmaya devam edecekseniz, kapsaml─▒ ├╝nite testleri ve kesinlikle yap─▒land─▒r─▒lm─▒┼č bir JSHint derleme g├Ârevi ile birlikte uygulaman─▒z iyi bir fikirdir, ├ž├╝nk├╝ mod├╝l├╝n├╝z├╝n sadece sizin i├žin korkun├ž bir ┼čekilde patlayacak bir karanl─▒k k├Â┼česi olmad─▒─č─▒na dair baz─▒ g├╝venceler sunar. S─▒k─▒ Modu a├žt─▒m. Veya, hey, i┼čte ba┼čka bir se├ženek: sadece "use strict" eski kodunuzu eklemeyin , muhtemelen daha g├╝venli, d├╝r├╝st olmak gerekirse. KES─░NL─░KLE "use strict" , ├╝├ž├╝nc├╝ taraf mod├╝ller gibi sahip olmad─▒─č─▒n─▒z veya bak─▒m─▒n─▒ yapmad─▒─č─▒n─▒z herhangi bir mod├╝l eklemeyin .

Bence ├Âl├╝mc├╝l kafesli bir hayvan olmas─▒na ra─čmen, "use strict" iyi ┼čeyler olabilir, ama bunu do─čru yapmak zorundas─▒n. Kesinle┼čmenin en iyi zaman─▒, projenizin ye┼čil alan oldu─ču ve s─▒f─▒rdan ba┼člad─▒─č─▒n─▒z zamand─▒r. JSHint/JSLint T├╝m uyar─▒lar ve se├ženeklerle, ekibinizin mide edebilece─či kadar s─▒k─▒la┼čt─▒r─▒lm─▒┼č ┼čekilde konfig├╝re edin, iyi bir derleme / test / assert sistemi elde Grunt+Karma+Chai edin ve ayn─▒ ┼čekilde yeni mod├╝llerinizi i┼čaretlemeye ba┼člay─▒n "use strict" . ├çok fazla hata ve uyar─▒y─▒ d├╝zeltmek i├žin haz─▒rl─▒kl─▒ olun. JSHint/JSLint Herhangi bir ihlal meydana gelirse yap─▒y─▒ FAIL olarak yap─▒land─▒rarak yer├žekimini herkesin anlad─▒─č─▒ndan emin olun .

Projem benim kabul etti─čimde ye┼čil alan projesi de─čildi "use strict" . Sonu├ž olarak, "use strict" IDE'm k─▒rm─▒z─▒ i┼čaretlerle doludur ├ž├╝nk├╝ mod├╝llerimin yar─▒s─▒na sahip de─čilim ve JSHint bundan ┼čikayet ediyor. Gelecekte hangi refactoring yapmam gerekti─čini hat─▒rlat─▒yor. Amac─▒m, eksik "use strict" ifadelerimin t├╝m├╝ nedeniyle k─▒rm─▒z─▒ i┼čaret ├╝cretsiz olmak , ancak bu y─▒llar ┼čimdi.


204







Kullanmak 'use strict'; , aniden kodunuzu iyile┼čtirmez.

JavaScript kat─▒ mod bir ├Âzelliktir ECMAScript'e 5 . S─▒k─▒ modunu, komut dosyan─▒z─▒n / i┼člevinizin ├╝st├╝nde bunu bildirerek etkinle┼čtirebilirsiniz.

 'use strict';
 

Bir JavaScript motoru bu y├Ânergeyi g├Ârd├╝─č├╝nde , kodu ├Âzel modda yorumlamaya ba┼člayacakt─▒r. Bu modda, potansiyel hatalar olarak ortaya ├ž─▒kabilecek belirli kodlama uygulamalar─▒ tespit edildi─činde hatalar at─▒l─▒r (kat─▒ modun nedeni budur).

Bu ├Ârne─či d├╝┼č├╝n├╝n:

 var a = 365;
var b = 030;
 

Say─▒sal de─či┼čmezleri hizalamak konusundaki saplant─▒s─▒nda, geli┼čtirici yanl─▒┼čl─▒kla de─či┼čkeni b sekizli de─či┼čmezle ba┼člatt─▒ . Kat─▒ olmayan mod, bunu de─čere sahip say─▒sal bir de─či┼čmez olarak yorumlayacakt─▒r 24 (10 tabandaki). Ancak kat─▒ mod bir hata verecektir.

S─▒k─▒ moddaki ayr─▒nt─▒l─▒ olmayan ├Âzelliklerin listesi i├žin bu cevaba bak─▒n .


Nerede kullanmal─▒y─▒m 'use strict'; ?

  • Benim i├žinde yeni bir JavaScript uygulamas─▒: Kesinlikle! Kodunuzla aptalca bir ┼čey yaparken kat─▒ mod bir bilgi u├žurucu olarak kullan─▒labilir.

  • Benim i├žinde varolan JavaScript kodu: Muhtemelen hay─▒r! Mevcut JavaScript kodunuz kat─▒ modda yasaklanm─▒┼č ifadelere sahipse, uygulama basit├že bozulur. S─▒k─▒ mod istiyorsan─▒z, mevcut kodunuzu hata ay─▒klamak ve d├╝zeltmek i├žin haz─▒rl─▒kl─▒ olmal─▒s─▒n─▒z. Bu y├╝zden kullanman─▒z 'use strict'; aniden kodunuzu iyile┼čtirmez .


S─▒k─▒ modu nas─▒l kullan─▒r─▒m?

  1. 'use strict'; Komut dosyan─▒z─▒n ├╝st├╝ne bir ifade ekleyin :

     // File: myscript.js
    
    'use strict';
    var a = 2;
    ....
     

    Dosyadaki her ┼čeyin myscript.js kat─▒ modda yorumlanaca─č─▒n─▒ unutmay─▒n.

  2. Veya, 'use strict'; i┼člev g├Âvdesinin ├╝st├╝ne bir ifade ekleyin :

     function doSomething() {
        'use strict';
        ...
    }
     

    Fonksiyonel s├Âzc├╝k kapsam─▒ndaki her ┼čey doSomething kat─▒ modda yorumlanacakt─▒r. Burada s├Âzc├╝ksel s├Âzc├╝k kelimesi ├Ânemlidir. Daha iyi bir a├ž─▒klama i├žin bu cevaba bak─▒n─▒z .


S─▒k─▒ modda hangi ┼čeyler yasakt─▒r?

S─▒k─▒ modda yasaklanm─▒┼č birka├ž ┼čeyi a├ž─▒klayan ho┼č bir makale buldum (bunun ├Âzel bir liste olmad─▒─č─▒n─▒ unutmay─▒n):

kapsam

Tarihsel olarak, JavaScript i┼člevlerin nas─▒l ele al─▒nd─▒─č─▒na dair kar─▒┼čt─▒. Bazen statik olarak alg─▒lan─▒r gibi g├Âr├╝n├╝rler, ancak baz─▒ ├Âzellikler dinamik olarak alg─▒lan─▒r gibi davranmalar─▒n─▒ sa─člar. Bu kafa kar─▒┼čt─▒r─▒c─▒d─▒r, programlar─▒n okunmas─▒n─▒ ve anla┼č─▒lmas─▒n─▒ zorla┼čt─▒r─▒r. Yanl─▒┼č anlama b├Âceklere neden olur. Ayn─▒ zamanda performans i├žin bir sorundur. Statik kapsam belirleme, derleme zaman─▒nda de─či┼čken ba─članman─▒n yap─▒lmas─▒na izin verir, ancak dinamik kapsam gereksinimi, ba─člaman─▒n ├žal─▒┼čma s├╝resine ertelenmesi gerekti─či anlam─▒na gelir, bu da ├Ânemli bir performans cezas─▒yla birlikte gelir.

S─▒k─▒ mod, t├╝m de─či┼čken ba─člaman─▒n statik olarak yap─▒lmas─▒n─▒ gerektirir. Bu, daha ├Ânce dinamik ba─članma gerektiren ├Âzelliklerin ortadan kald─▒r─▒lmas─▒ veya de─či┼čtirilmesi gerekti─či anlam─▒na gelir. Spesifik olarak, with ifadesi ortadan kald─▒r─▒l─▒r ve eval i┼člevinin, arayan ortam─▒n─▒ kurcalama kabiliyeti ciddi ┼čekilde s─▒n─▒rland─▒r─▒l─▒r.

S─▒k─▒ kodun avantajlar─▒ndan biri, YUI Kompres├Âr gibi ara├žlar─▒n i┼čleme s─▒ras─▒nda daha iyi bir i┼č yapabilmesidir.

Z─▒mni Global De─či┼čkenler

JavaScript global de─či┼čkenleri ima etti. A├ž─▒k├ža bir de─či┼čken bildirmezseniz, sizin i├žin dolayl─▒ olarak global bir de─či┼čken bildirilir. Bu, yeni ba┼člayanlar i├žin programlamay─▒ kolayla┼čt─▒r─▒r ├ž├╝nk├╝ temel temizlik i┼člerinin bir k─▒sm─▒n─▒ ihmal edebilirler. Ancak daha b├╝y├╝k programlar─▒n y├Ânetimini ├žok daha zorla┼čt─▒r─▒r ve g├╝venilirli─či ├Ânemli ├Âl├ž├╝de azalt─▒r. Yani kat─▒ modda, ima edilen global de─či┼čkenler art─▒k yarat─▒lmamaktad─▒r. T├╝m de─či┼čkenlerinizi a├ž─▒k├ža belirtmelisiniz.

Global S─▒z─▒nt─▒

this Global nesneye ba─članmas─▒na neden olabilecek baz─▒ durumlar vard─▒r . ├ľrne─čin, new bir yap─▒c─▒ i┼člevini ├ža─č─▒r─▒rken ├Ânek sa─člamay─▒ unutursan─▒z , yap─▒c─▒ this beklenmedik bir ┼čekilde genel nesneye ba─član─▒r, bu nedenle yeni bir nesneyi ba┼člatmak yerine, bunun yerine genel de─či┼čkenleri sessizce kurcalar. Bu gibi durumlarda, kat─▒ mod ba─članacak this ve undefined bu da yap─▒c─▒n─▒n bir istisna atmas─▒na ve hatan─▒n daha erken tespit edilmesine olanak sa─člayacakt─▒r.

G├╝r├╝lt├╝l├╝ Ar─▒za

JavaScript her zaman salt okunur ├Âzelliklere sahiptir, ancak ES5'in Object.createProperty i┼člevi bu ├Âzelli─či g├Âsterene kadar bunlar─▒ kendiniz olu┼čturamazs─▒n─▒z . Salt okunur bir ├Âzelli─če bir de─čer atamay─▒ denerseniz sessizce ba┼čar─▒s─▒z olur. Atama m├╝lk├╝n de─čerini de─či┼čtirmez, ancak program─▒n─▒z oldu─ču gibi devam eder. Bu, programlar─▒n tutars─▒z bir duruma ge├žmesine neden olabilecek bir b├╝t├╝nl├╝k tehlikesidir. S─▒k─▒ modda, salt okunur bir ├Âzelli─či de─či┼čtirmeye ├žal─▒┼čmak bir istisna atar.

Sekizli

Say─▒lar─▒n sekizli (veya 8) temsili g├Âsterimi, kelime boyutlar─▒ 3 kat─▒ olan makinelerde makine d├╝zeyinde programlama yaparken son derece faydal─▒yd─▒. 60 bitlik bir kelime b├╝y├╝kl├╝─č├╝ne sahip CDC 6600 ana bilgisayar ile ├žal─▒┼č─▒rken, sekizlik gerekliydi. Sekizli okuyabilirseniz, bir kelimeye 20 basamak olarak bakabilirsiniz. Op kodunu iki hane temsil eder ve bir hane 8 kay─▒ttan birini tan─▒mlar. Makine kodlar─▒ndan y├╝ksek seviyeli dillere yava┼č ge├ži┼č s─▒ras─▒nda, programlama dillerinde sekizli formlar sa─člaman─▒n yararl─▒ oldu─ču d├╝┼č├╝n├╝lm├╝┼čt├╝r.

C'de, son derece talihsiz bir sekizlik g├Âsterimi se├žildi: S─▒f─▒r lideri. Yani C, 0100 64, 100 de─čil, ve 08 8 de─čil, bir hatad─▒r. Bu maalesef, bu anakronizm, JavaScript dahil, neredeyse sadece t├╝m hatalar─▒n kullan─▒ld─▒─č─▒ eski dillere kopyaland─▒. Ba┼čka bir amac─▒ yok. Bu y├╝zden kat─▒ modda, sekizlik formlara art─▒k izin verilmez.

Et cetera

Arg├╝manlar s├Âzde dizi ES5'te biraz daha dizi benzeri olur. Kat─▒ modda, ├Âzelliklerini callee ve caller ├Âzelliklerini kaybeder . Bu, arguments pek ├žok gizli i├žerikten vazge├žmeden, g├╝venilmeyen koda ge├žirmenizi m├╝mk├╝n k─▒lar . Ayr─▒ca, arguments fonksiyonlar─▒n ├Âzelli─či ortadan kalkar.

S─▒k─▒ modda, de─či┼čmez i┼člevdeki yinelenen anahtarlar s├Âzdizimi hatas─▒ olu┼čturur. Bir i┼člev ayn─▒ ada sahip iki parametreye sahip olamaz. Bir i┼člev, parametrelerinden biriyle ayn─▒ ada sahip bir de─či┼čkene sahip olamaz. Bir fonksiyon delete kendi de─či┼čkenlerini yapamaz . delete Yap─▒land─▒r─▒lamayan bir m├╝lke giri┼čimi ┼čimdi bir istisna atar. ─░lkel de─čerler ├Ârt├╝k olarak sar─▒lmaz.


Gelecekteki JavaScript s├╝r├╝mleri i├žin ayr─▒lm─▒┼č kelimeler

ECMAScript 5, ayr─▒lm─▒┼č kelimelerin bir listesini ekler. Bunlar─▒ de─či┼čken veya arg├╝man olarak kullan─▒rsan─▒z, kat─▒ mod bir hata verecektir. Ayr─▒lm─▒┼č kelimeler:

implements , interface , let , package , private , protected , public , static , Ve yield


Daha fazla okuma


156







Art─▒k her geli┼čtiricinin kat─▒ modu kullanmaya ba┼člamas─▒n─▒ ┼čiddetle tavsiye ediyorum. S─▒k─▒ modun yasal olarak kodunuzda oldu─čunu bile bilmedi─čimiz hatalardan kurtarmam─▒za yard─▒mc─▒ olaca─č─▒n─▒ destekleyen yeterince taray─▒c─▒ var.

G├Âr├╝n├╝┼če g├Âre, ilk a┼čamada daha ├Ânce hi├ž kar┼č─▒la┼čmad─▒─č─▒m─▒z hatalar olacak. T├╝m avantajlardan faydalanmak i├žin, her ┼čeyi yakalad─▒─č─▒m─▒zdan emin olmak i├žin s─▒k─▒ moda ge├žtikten sonra uygun testleri yapmam─▒z gerekiyor. Kesinlikle sadece use strict kodumuzu atmay─▒z ve hata olmad─▒─č─▒n─▒ varsay─▒yoruz. Bu y├╝zden karma┼čas─▒, daha iyi kod yazmak i├žin bu inan─▒lmaz derecede yararl─▒ dil ├Âzelli─čini kullanmaya ba┼člaman─▒n zaman─▒d─▒r.

├ľrne─čin,

 var person = {
    name : 'xyz',
    position : 'abc',
    fullname : function () {  "use strict"; return this.name; }
};
 

JSLint , Douglas Crockford taraf─▒ndan yaz─▒lm─▒┼č bir hata ay─▒klay─▒c─▒d─▒r. Komut dosyas─▒na yap─▒┼čt─▒rman─▒z yeterlidir; kodunuzdaki farkedilir sorunlar─▒ ve hatalar─▒ h─▒zla tarar.


135


2013-07-05





Di─čer cevaplar─▒ tamamlayan biraz daha k├Âkl├╝ bir cevap sunmak istiyorum. En pop├╝ler yan─▒t─▒ d├╝zenlemeyi umuyordum, ancak ba┼čar─▒s─▒z oldum. Yapabildi─čim kadar kapsaml─▒ ve eksiksiz yapmaya ├žal─▒┼čt─▒m.

Daha fazla bilgi i├žin MDN belgelerine bakabilirsiniz .

"use strict" ECMAScript 5'te sunulan bir y├Ânerge.

Direktifler ifadelere benzer, ancak farkl─▒d─▒r.

  • use strict Anahtar kelimeler i├žermez: Y├Ânerge, ├Âzel bir dize de─či┼čmezinden (tek veya ├žift t─▒rnak i├žinde) olu┼čan basit bir ifade ifadesidir. ECMAScript 5'i uygulamayan JavaScript motorlar─▒, yaln─▒zca yan etkisi olmayan bir ifade ifadesi g├Âr├╝r. ECMAScript standartlar─▒n─▒n gelecekteki s├╝r├╝mlerinin use ger├žek bir anahtar kelime olarak sunulmas─▒ beklenmektedir ; al─▒nt─▒lar b├Âylece eski hale gelirdi.
  • use strict sadece bir beti─čin veya bir i┼člevin ba┼č─▒nda kullan─▒labilir, yani her di─čer (ger├žek) ifadeden ├Ânce gelmelidir. Bir fonksiyon komut dosyas─▒ndaki ilk komut olmak zorunda de─čildir: dize de─či┼čmezlerinden olu┼čan di─čer ifadelerden ├Ânce gelebilir (ve JavaScript uygulamalar─▒ bunlar─▒ uygulamaya ├Âzel y├Ânergeler olarak kabul edebilir). ─░lk ger├žek ifadeyi izleyen (bir komut dosyas─▒nda veya i┼člevde) dize de─či┼čmez ifadeleri basit ifade ifadeleridir. Terc├╝manlar bunlar─▒ y├Ânerge olarak yorumlamamal─▒ ve hi├žbir etkisi yoktur.

use strict Y├Ânergesi (bir komut dosyas─▒ veya bir fonksiyonu olarak) ┼ču kodu s─▒k─▒ kod oldu─čunu g├Âsterir. Bir komut dosyas─▒ en ├╝st d├╝zeyindeki kod (bir i┼člevde olmayan kod), komut dosyas─▒ bir use strict y├Ânerge i├žerdi─činde kat─▒ kod olarak kabul edilir . Bir i┼člevin i├žeri─či, i┼člevin kendisi kat─▒ bir kodla tan─▒mland─▒─č─▒nda veya i┼člev bir use strict y├Ânerge i├žerdi─činde kat─▒ kod olarak kabul edilir . Bir eval() y├Ânteme iletilen kod, kat─▒ bir koddan eval() ├ža─čr─▒ld─▒─č─▒nda kat─▒ bir kod olarak kabul edilir veya use strict y├Ânergenin kendisini i├žerir .

ECMAScript 5'in kat─▒ modu, dilin ilgili a├ž─▒klar─▒n─▒ ortadan kald─▒ran ve daha kat─▒ hata denetimi ve daha y├╝ksek g├╝venlik ├Âzellikleri i├žeren, JavaScript dilinin s─▒n─▒rl─▒ bir alt k├╝mesidir. A┼ča─č─▒dakiler kat─▒ mod ile normal mod aras─▒ndaki farklar─▒ listeler (bunlardan ilk ├╝├ž├╝ ├Âzellikle ├Ânemlidir):

  • with -Statement i┼člevini kat─▒ modda kullanamazs─▒n─▒z .
  • S─▒k─▒ kipte t├╝m de─či┼čkenlerin bildirilmesi gerekir: de─či┼čken, i┼člev, i┼člev parametresi, catch-clause parametresi veya genel ├Âzelli─či olarak bildirilmeyen bir tan─▒mlay─▒c─▒ya bir de─čer Object atarsan─▒z, o zaman bir a al─▒rs─▒n─▒z ReferenceError . Normal modda, tan─▒mlay─▒c─▒ dolayl─▒ olarak bir global de─či┼čken (global bir ├Âzellik olarak Object ) olarak bildirilir.
  • S─▒k─▒ modda, anahtar s├Âzc├╝k this , undefined i┼člev olarak ├ža─čr─▒lan i┼člevlerde (y├Ântem olarak de─čil) de─čere sahiptir . (Normal modda this her zaman global i┼čaret eder Object ). Bu fark, bir uygulaman─▒n kat─▒ modu destekleyip desteklemedi─čini test etmek i├žin kullan─▒labilir:
 var hasStrictMode = (function() { "use strict"; return this===undefined }());
 
  • Ayr─▒ca bir i┼člev call() veya apply kat─▒ modda ├ža─čr─▒ld─▒─č─▒nda this , tam olarak call() veya apply() ├ža─čr─▒n─▒n ilk arg├╝man─▒n─▒n de─čeridir . (Normal modda null ve undefined genel ile de─či┼čtirilir Object ve nesneler olmayan de─čerler nesnelere d├Âk├╝l├╝r.)

  • S─▒k─▒ modda TypeError , salt okunur ├Âzelliklere atamaya ├žal─▒┼čt─▒─č─▒n─▒zda veya geni┼čletilemeyen bir nesne i├žin yeni ├Âzellikler tan─▒mlamaya ├žal─▒┼čt─▒─č─▒n─▒zda bir a al─▒rs─▒n─▒z . (Normal modda her ikisi de sadece hata mesaj─▒ olmadan ba┼čar─▒s─▒z olur.)

  • S─▒k─▒ modda, kodu eval() iletirken, arayan─▒n kapsam─▒ndaki de─či┼čkenleri veya i┼člevleri tan─▒mlayamaz veya tan─▒mlayamazs─▒n─▒z (normal modda yapabilece─činiz gibi). Bunun yerine, yeni bir kapsam yarat─▒l─▒r eval() ve de─či┼čkenler ve i┼člevler bu kapsam dahilindedir. eval() Y├╝r├╝tme tamamland─▒ktan sonra bu kapsam imha edilir .
  • Kat─▒ modda, bir i┼člevin arg├╝manlar─▒-nesnesi, o i┼čleve iletilen de─čerlerin statik bir kopyas─▒n─▒ i├žerir. Normal modda, arg├╝manlar-nesnesi biraz "sihirli" davran─▒┼ča sahiptir: Dizinin elemanlar─▒ ve adland─▒r─▒lm─▒┼č i┼člev parametreleri, ayn─▒ de─čeri g├Âsterir.
  • S─▒k─▒ modda SyntaxError , delete operat├Âr├╝n vas─▒fs─▒z bir tan─▒mlay─▒c─▒ (de─či┼čken, i┼člev veya i┼člev parametresi) taraf─▒ndan takip edilece─či bir zaman al─▒rs─▒n─▒z . Normal modda delete ifade hi├žbir ┼čey yapmaz ve de─čerlendirilir false .
  • Kat─▒ modda, TypeError yap─▒land─▒r─▒lamayan bir ├Âzelli─či silmeye ├žal─▒┼čt─▒─č─▒n─▒zda bir zaman al─▒rs─▒n─▒z . (Normal modda deneme basit bir ┼čekilde ba┼čar─▒s─▒z olur ve delete ifade de─čerlendirilir false ).
  • Kat─▒ modda, bir nesne de─či┼čmezi i├žin ayn─▒ adda birka├ž ├Âzellik tan─▒mlamaya ├žal─▒┼čt─▒─č─▒n─▒zda s├Âzdizimsel bir hata olarak kabul edilir. (Normal modda hata yoktur.)
  • Kat─▒ modda, bir i┼člev bildiriminin ayn─▒ ada sahip birden fazla parametresi oldu─čunda, s├Âzdizimsel bir hata olarak kabul edilir. (Normal modda hata yoktur.)
  • Kat─▒ modda, sekizli de─či┼čmezlere izin verilmez (bunlar ile ba┼člayan de─či┼čmezlerdir 0x . (Normal modda baz─▒ uygulamalar sekizli de─či┼čmezlere izin verir).
  • Kat─▒ modda tan─▒mlay─▒c─▒lar eval ve arguments anahtar kelimeler gibi ele al─▒n─▒r. De─čerlerini de─či┼čtiremezsiniz, bunlara de─čer atayamazs─▒n─▒z ve bunlar─▒ de─či┼čkenler, i┼člevler, i┼člev parametreleri veya catch blo─čunun tan─▒mlay─▒c─▒lar─▒ i├žin ad olarak kullanamazs─▒n─▒z.
  • S─▒k─▒ modda arama y─▒─č─▒n─▒n─▒ inceleme olanaklar─▒ ├╝zerinde daha fazla k─▒s─▒tlama vard─▒r. arguments.caller ve s─▒k─▒ modda bir i┼člevde arguments.callee neden olur TypeError . Ayr─▒ca, baz─▒ modlardaki i┼člevlerin baz─▒ arayan ve de─či┼čken ├Âzellikleri, TypeError bunlar─▒ okumaya ├žal─▒┼čt─▒─č─▒n─▒zda zamana neden olur.

95


2015-05-15





Benim iki Sentim:

S─▒k─▒ modun ama├žlar─▒ndan biri, sorunlar─▒n daha h─▒zl─▒ hata ay─▒klamas─▒na izin vermektir. Web sitenizde sessiz ve garip davran─▒┼člara neden olabilecek baz─▒ yanl─▒┼č ┼čeyler meydana geldi─činde istisna atarak geli┼čtiricilere yard─▒mc─▒ olur. Kulland─▒─č─▒m─▒z an use strict , kod geli┼čtiricinin ├Ânceden d├╝zeltmesine yard─▒mc─▒ olan hatalar─▒ atar.

Kulland─▒ktan sonra ├Â─črendi─čim birka├ž ├Ânemli ┼čey use strict :

Global De─či┼čken Beyan─▒n─▒ ├ľnler:

 var tree1Data = { name: 'Banana Tree',age: 100,leafCount: 100000};

function Tree(typeOfTree) {
    var age;
    var leafCount;

    age = typeOfTree.age;
    leafCount = typeOfTree.leafCount;
    nameoftree = typeOfTree.name;
};

var tree1 = new Tree(tree1Data);
console.log(window);
 

┼×imdi, bu kod, nameoftree kullan─▒larak eri┼čilebilecek k├╝resel bir kapsamda olu┼čturuyor window.nameoftree . Uygulad─▒─č─▒m─▒z zaman use strict hata kodu at─▒yordu.

Yakalanmam─▒┼č ReferenceError: Nameoftree tan─▒mlanmad─▒

Sample

with Deyimi ortadan kald─▒r─▒r:

with ifadeler uglify-js gibi ara├žlar kullan─▒larak k├╝├ž├╝lt├╝lemez . Ayr─▒ca, kullan─▒mdan kald─▒r─▒lm─▒┼č ve gelecekteki JavaScript s├╝r├╝mlerinden kald─▒r─▒lm─▒┼čt─▒r.

Sample

Kopyalar─▒ ├ľnler:

Yinelenen ├Âzelli─čimiz oldu─čunda, bir istisna atar

Yakalanmam─▒┼č SyntaxError: Nesne de─či┼čmezindeki yinelenen veri ├Âzelli─či kat─▒ modda kullan─▒lm─▒yor

 "use strict";
var tree1Data = {
    name: 'Banana Tree',
    age: 100,
    leafCount: 100000,
    name:'Banana Tree'
};
 

Çok az var ama bu konuda daha fazla bilgi edinmem gerekiyor.


83







Ge├žen y─▒l yay─▒mlanan bir taray─▒c─▒ kullan─▒yorsan─▒z, o zaman b├╝y├╝k olas─▒l─▒kla JavaScript S─▒k─▒ modunu destekler. ECMAScript 5 mevcut standart olmadan ├Ânce sadece eski taray─▒c─▒lar bunu desteklemiyor.

Komutun etraf─▒ndaki al─▒nt─▒lar, kodun hala eski taray─▒c─▒larda da ├žal─▒┼čaca─č─▒ndan emin olman─▒z─▒ sa─člar (s─▒k─▒ modda bir s├Âzdizimi hatas─▒ olu┼čturan ┼čeyler genellikle sadece eski taray─▒c─▒larda alg─▒lamas─▒ zor bir ┼čekilde komut dosyas─▒n─▒n ar─▒zalanmas─▒na neden olur).


62







Eklerken "use strict"; , a┼ča─č─▒daki durumlarda bir ataca─č─▒m SyntaxError beti─čin ├Ânce:

  • Gelecekteki ECMAScript s├╝r├╝mleri ├Ân├╝n├╝n a├ž─▒lmas─▒ i├žin (├Âng├Âr├╝ i├žinde yeni sakl─▒d─▒r anahtar kelimelerden birini kullanarak, ECMAScript'i 6 ): implements , interface , let , package , private , protected , public , static , ve yield .

  • Bloklarda bildirim fonksiyonu

     if(a<b){ function f(){} }
     
  • Sekizli s├Âzdizimi

     var n = 023;
     
  • this k├╝resel nesneyi i┼čaret edin.

      function f() {
          "use strict";
          this.a = 1;
     };
     f(); 
     
  • Nesne de─či┼čmezindeki bir ├Âzellik ad─▒ i├žin ayn─▒ ad─▒ iki kez bildirmek

      {a: 1, b: 3, a: 7} 
     

    Bu art─▒k ECMAScript 6'daki durum de─čil ( hata 1041128 ).

  • Ayn─▒ isim fonksiyonuna sahip iki fonksiyon arg├╝man─▒n─▒ bildirme

     f(a, b, b){}
     
  • Bildirilmemi┼č bir de─či┼čkene de─čer ayarlama

     function f(x){
       "use strict";
       var a = 12;
       b = a + x*35; // error!
    }
    f();
     
  • delete De─či┼čken ad─▒nda kullanma delete myVariable;

  • Kullan─▒lmas─▒ eval veya arguments de─či┼čken veya fonksiyon arg├╝man─▒ ad─▒ olarak

     "use strict";
    arguments++;
    var obj = { set p(arguments) { } };
    try { } catch (arguments) { }
    function arguments() { } 
     

Kaynaklar:


58







S─▒k─▒ mod, normal JavaScript anlam─▒nda birka├ž de─či┼čiklik yapar:

  • Baz─▒ JavaScript sessiz hatalar─▒n─▒, hata atmalar─▒n─▒ engelleyerek ortadan kald─▒r─▒r.

  • JavaScript motorlar─▒n─▒n optimizasyon yapmas─▒n─▒ zorla┼čt─▒ran hatalar─▒ d├╝zeltir.

  • ECMAScript'in gelecek s├╝r├╝mlerinde tan─▒mlanmas─▒ muhtemel baz─▒ s├Âzdizimlerini yasaklar.

Daha fazla bilgi i├žin vistit Strict Mode- Javascript


53







"S─▒k─▒ Kullan"; programc─▒n─▒n JavaScript'in gev┼ček veya k├Ât├╝ ├Âzelliklerini kullanmayaca─č─▒ bir sigortad─▒r. Bu bir rehber, t─▒pk─▒ bir cetvel gibi d├╝z ├žizgiler yapman─▒za yard─▒mc─▒ olacak. "Strict Kullan", "D├╝z kodlama" yapman─▒za yard─▒mc─▒ olur.

Sat─▒rlar─▒n─▒ d├╝z yapmak i├žin cetvelleri kullanmamay─▒ tercih edenler genellikle ba┼čkalar─▒n─▒n kodlar─▒n─▒ hata ay─▒klamalar─▒n─▒ isteyen sayfalarda bulunur.

─░nan bana. Genel gider, k├Ât├╝ tasarlanm─▒┼č kod ile kar┼č─▒la┼čt─▒r─▒ld─▒─č─▒nda ├Ânemsizdir. Birka├ž y─▒ldan beri ├╝st d├╝zey bir JavaScript geli┼čtiricisi olan Doug Crockford'un burada ├žok ilgin├ž bir yaz─▒s─▒ var . ┼×ahsen, iyi ├žal─▒┼čmam─▒ unutmad─▒─č─▒mdan emin olmak i├žin her zaman onun sitesine d├Ânmeyi seviyorum.

Modern JavaScript uygulamas─▒nda daima "Use Strict"; Pragma. ECMA Grubunun ÔÇťS─▒k─▒ÔÇŁ modunu iste─če ba─čl─▒ yapmas─▒n─▒n tek nedeni, daha az deneyimli kodlay─▒c─▒lar─▒n JavaScript'e eri┼čmesine izin vermek ve daha sonra yeni ve daha g├╝venli kodlama uygulamalar─▒na uyum sa─člamak i├žin zaman vermektir.


51







Dahil use strict Bu noktadan itibaren t├╝m hassas JavaScript dosyalar─▒ ba┼č─▒nda daha iyi bir JavaScript programc─▒ olmak ve global olma ve i┼čler sessizce de─či┼čtirmek rastgele de─či┼čkenler ├Ânlemek i├žin k├╝├ž├╝k bir yoldur.


46







W3schools'dan al─▒nt─▒ yapmak :

"S─▒k─▒ Kullan─▒m" Direktifi

"Use strict" y├Ânergesi JavaScript 1.8.5'te (ECMAScript s├╝r├╝m 5) yenidir.

Bu bir ifade de─čil, ├Ânceki s├╝r├╝mlerde JavaScript taraf─▒ndan yok say─▒lan bir ifadedir.

"S─▒k─▒ kullan" ─▒n amac─▒, kodun "kat─▒ modda" y├╝r├╝t├╝lmesi gerekti─čini belirtmektir.

Kat─▒ modda, ├Ârne─čin bildirilmemi┼č de─či┼čkenleri kullanamazs─▒n─▒z.

Neden S─▒k─▒ Modu?

S─▒k─▒ mod, "g├╝venli" JavaScript yazmay─▒ kolayla┼čt─▒r─▒r.

S─▒k─▒ mod de─či┼čiklikleri daha ├Ânce kabul edilen "k├Ât├╝ s├Âzdizimini" ger├žek hatalara d├Ân├╝┼čt├╝rd├╝.

├ľrnek olarak, normal JavaScript'te, bir de─či┼čken ad─▒n─▒ yanl─▒┼č yazmak yeni bir global de─či┼čken olu┼čturur. S─▒k─▒ modda, bu bir hata yapacakt─▒r, bu da yanl─▒┼čl─▒kla bir global de─či┼čken olu┼čturmay─▒ imkans─▒z hale getirir.

Normal JavaScript'te, bir geli┼čtirici yaz─▒labilir olmayan ├Âzelliklere de─čer atayan herhangi bir hata geri bildirimi almaz.

Kat─▒ modda, yaz─▒lamayan bir ├Âzelli─če, yaln─▒zca al─▒c─▒ ├Âzelli─čine, varolmayan ├Âzelli─čine, varolmayan bir de─či┼čkene veya varolmayan bir nesneye yap─▒lan herhangi bir atama hata verir.

Daha fazla bilgi i├žin l├╝tfen http://www.w3schools.com/js/js_strict.asp adresine bak─▒n.


42







"use strict" JavaScript kodunu kat─▒ modda ├žal─▒┼čt─▒r─▒r , bu da kullan─▒mdan ├Ânce her ┼čeyin tan─▒mlanmas─▒ gerekti─či anlam─▒na gelir. S─▒k─▒ modu kullanman─▒n temel nedeni, tan─▒mlanmam─▒┼č y├Ântemlerin yanl─▒┼čl─▒kla global kullan─▒m─▒ndan ka├ž─▒nmakt─▒r.

Ayr─▒ca kat─▒ modda i┼čler daha h─▒zl─▒ ├žal─▒┼č─▒r, baz─▒ uyar─▒lar veya sessiz uyar─▒lar ├Âl├╝mc├╝l hatalar atar; daha d├╝zenli bir kod yapmak i├žin her zaman kullanmak daha iyidir.

"use strict" ECMA5'te yayg─▒n olarak kullan─▒lmas─▒ gerekir, ECMA6'da varsay─▒lan olarak JavaScript'in bir par├žas─▒d─▒r , bu nedenle ES6 kullan─▒yorsan─▒z eklenmesine gerek yoktur.

MDN'den bu ifadelere ve ├Ârneklere bak─▒n:

"Use strict" Y├Ânergesi
"use strict" y├Ânergesi JavaScript 1.8.5'te (ECMAScript s├╝r├╝m 5) yenidir. Bu bir ifade de─čil, ├Ânceki s├╝r├╝mlerde JavaScript taraf─▒ndan yok say─▒lan bir ifadedir. "S─▒k─▒ kullan" ─▒n amac─▒, kodun "kat─▒ modda" y├╝r├╝t├╝lmesi gerekti─čini belirtmektir. Kat─▒ modda, ├Ârne─čin bildirilmemi┼č de─či┼čkenleri kullanamazs─▒n─▒z.

"
Use strict" kullan─▒m─▒na ├Ârnekler: ─░┼člevler i├žin kat─▒ mod: Ayn─▒ ┼čekilde, bir i┼člev i├žin kat─▒ modu ├ža─č─▒rmak i├žin, "use strict" ifadesini de belirtin; (ya da 'use strict';) herhangi bir ba┼čka ifadeden ├Ânce i┼člevin v├╝cudunda.

1) i┼člevlerinde s─▒k─▒ mod

  function strict() {
     // Function-level strict mode syntax
     'use strict';
     function nested() { return 'And so am I!'; }
     return "Hi!  I'm a strict mode function!  " + nested();
 }
 function notStrict() { return "I'm not strict."; }

 console.log(strict(), notStrict());
 

2) b├╝t├╝n komut dosyas─▒ kat─▒ mod

 'use strict';
var v = "Hi! I'm a strict mode script!";
console.log(v);
 

3) Yaz─▒lamayan bir k├╝resel atama

 'use strict';

// Assignment to a non-writable global
var undefined = 5; // throws a TypeError
var Infinity = 5; // throws a TypeError

// Assignment to a non-writable property
var obj1 = {};
Object.defineProperty(obj1, 'x', { value: 42, writable: false });
obj1.x = 9; // throws a TypeError

// Assignment to a getter-only property
var obj2 = { get x() { return 17; } };
obj2.x = 5; // throws a TypeError

// Assignment to a new property on a non-extensible object.
var fixed = {};
Object.preventExtensions(fixed);
fixed.newProp = 'ohai'; // throws a TypeError
 

┼×unlar─▒ yapabilirsiniz MDN'yi b├Âl├╝m├╝nde daha fazla bilgi .


37







ECMAScript komitesinde yer alan baz─▒ ki┼čiler taraf─▒ndan yap─▒lan iyi bir konu┼čma var: JavaScriptÔÇÖte yap─▒lan de─či┼čiklikler, B├Âl├╝m 1: ECMAScript 5 " , "use strict" anahtar─▒n art─▒ml─▒ kullan─▒m─▒n─▒n JavaScript uygulay─▒c─▒lar─▒n─▒n her web sitesini aniden k─▒rmadan JavaScriptÔÇÖin tehlikeli ├Âzelliklerinin ├žo─čunu temizlemesine olanak sa─člad─▒─č─▒ hakk─▒nda d├╝nyada.

Tabii ki, ayn─▒ zamanda bu yanl─▒┼č ├Âzelliklerin ne kadar─▒n─▒n (oldu─ču) ve ECMAScript 5'in bunlar─▒ nas─▒l d├╝zeltti─či hakk─▒nda da konu┼čuyor.


31







Kar┼č─▒la┼čt─▒r─▒lacak k├╝├ž├╝k ├Ârnekler:

S─▒k─▒ olmayan mod:

 for (i of [1,2,3]) console.log(i)
    
// output:
// 1
// 2
// 3 

S─▒k─▒ modu:

 'use strict';
for (i of [1,2,3]) console.log(i)

// output:
// Uncaught ReferenceError: i is not defined 

S─▒k─▒ olmayan mod:

 String.prototype.test = function () {
  console.log(typeof this === 'string');
};

'a'.test();

// output
// false 

 String.prototype.test = function () {
  'use strict';
  
  console.log(typeof this === 'string');
};

'a'.test();

// output
// true 


25


2016-08-21





Not use strict tan─▒t─▒ld─▒ ECMAscript 5 ve o zamandan beri tutuldu.

ES6 ve ES7'de kat─▒ modun tetiklenmesi i├žin ko┼čullar a┼ča─č─▒da verilmi┼čtir :

  • Genel kod, S─▒k─▒ Kullan─▒m Talimat─▒ i├žeren bir Y├Ânergenin Prologuyla ba┼čl─▒yorsa kat─▒ mod kodudur (bkz. 14.1.1).
  • Mod├╝l kodu her zaman kat─▒ mod kodudur.
  • Bir b├╝t├╝n par├žalar─▒ ClassDeclaration veya ClassExpression kat─▒ mod kodudur.
  • De─čerlendirme kodu, Bir S─▒k─▒ Kullan─▒m Talimat─▒ i├žeren bir Direktif Prologuyla ba┼čl─▒yorsa veya eval i├žin yap─▒lan arama kat─▒ mod kodunda bulunan do─črudan bir de─čerlendirme ise (bkz. 12.3.4.1), kat─▒ mod kodudur.
  • ─░┼člev kodu, kat─▒ ─░┼člev Kodundaki ili┼čkili ─░┼člevsel A├ž─▒klama, ─░┼člevsel D├╝zenleme, ─░┼člevsel D├╝zenleme, ─░┼člevsel D├╝zenleme, ─░┼člev D├╝zenleme veya Ok ─░┼člevini i├žeriyorsa veya i┼člev i┼člevinin [[ECMAScriptKodu]] i├ž yuvas─▒n─▒n de─čerini ├╝reten kodun Y├Ânergeli Prolog'la ba┼člamas─▒ durumunda kat─▒ mod kodudur. Kullan─▒m S─▒k─▒ Direktifi i├žeren.
  • Ge├žen arg├╝man i┼člendi─činde bir oldu─čunu bir dize ise dahili Fonksiyon ve Jenerat├Âr in┼čaat├ž─▒ olan kat─▒ mod koduna arg├╝man olarak verilir Fonksiyon kodu FunctionBody ┼čeklinde kullan─▒n S─▒k─▒ Direktifi i├žeren bir direktif Prologue ile ba┼člar.

19







Geli┼čtiricilerin kullanmas─▒ gereken ana nedenler "use strict" :

  1. Global de─či┼čkenlerin yanl─▒┼čl─▒kla bildirilmesini ├Ânler . Kullan─▒m "use strict()" , de─či┼čkenlerin var kullan─▒mdan ├Ânce ile birlikte bildirilmesini sa─člar . ├ľrne─čin:

     function useStrictDemo(){
     'use strict';
     //works fine
     var a = 'No Problem';
    
     //does not work fine and throws error
     k = "problem"
    
     //even this will throw error
     someObject = {'problem': 'lot of problem'};
    }
     
  2. Not: "use strict" Direktif sadece bir beti─čin veya fonksiyonun ba┼č─▒nda tan─▒n─▒r.
  3. Dize "arguments" de─či┼čken olarak kullan─▒lamaz:

     "use strict";
    var arguments = 3.14;    // This will cause an error
     
  4. Anahtar kelimelerin kullan─▒m─▒n─▒ de─či┼čken olarak k─▒s─▒tlayacakt─▒r. Onlar─▒ kullanmaya ├žal─▒┼čmak hatalar verecektir.

K─▒sacas─▒ kodunuzu daha az hata e─čilimli hale getirecek ve s─▒rayla iyi bir kod yazman─▒z─▒ sa─člayacakt─▒r.

Bu konuda daha fazla okumak i├žin buraya ba┼čvurabilirsiniz .


14







"s─▒k─▒ kullan"; JavaScriptÔÇÖi biraz daha g├╝├žl├╝ hale getirme ├žabas─▒ ECMAÔÇÖd─▒r. JS'ye en az─▒ndan biraz "kat─▒" yapma ├žabas─▒ getirir (di─čer diller 90'lardan bu yana kat─▒ kurallar uygular). Asl─▒nda, JavaScript geli┼čtiricilerini bir t├╝r kodlama en iyi uygulamalar─▒n─▒ izlemeye "zorlar". Yine de, JavaScript ├žok k─▒r─▒lgan. Yaz─▒lan de─či┼čkenler, yaz─▒lan y├Ântemler vb. Gibi bir ┼čey yoktur. JavaScript geli┼čtiricilere Java veya ActionScript3 gibi daha sa─člam bir dil ├Â─črenmelerini ve ayn─▒ en iyi uygulamalar─▒ JavaScript kodunuzda uygulamalar─▒n─▒ ┼čiddetle tavsiye ediyorum, daha iyi ├žal─▒┼čacak ve daha kolay ay─▒klama.


12







JavaScript ÔÇťkat─▒ÔÇŁ modu ECMAScript 5'te tan─▒t─▒ld─▒.

 (function() {
  "use strict";
  your code...
})();
 

"use strict"; JS dosyan─▒z─▒n en ├╝st├╝ne yazmak kat─▒ s├Âzdizimi kontrol├╝n├╝ a├žar. Bizim i├žin a┼ča─č─▒daki g├Ârevleri yapar:

  1. bildirilmemi┼č bir de─či┼čkene atamaya ├žal─▒┼č─▒rsan─▒z hata g├Âsterir.

  2. temel JS sistem kitapl─▒klar─▒n─▒n ├╝zerine yazman─▒z─▒ engeller

  3. baz─▒ g├╝venli olmayan veya hataya a├ž─▒k dil ├Âzelliklerini yasaklar

use strict ayr─▒ca bireysel fonksiyonlar─▒n i├žinde de ├žal─▒┼č─▒r. Kodunuza eklemek her zaman daha iyi bir uygulamad─▒r use strict .

Taray─▒c─▒ uyumlulu─ču sorunu: "Kullan─▒m" direktifleri geriye d├Ân├╝k olarak uyumludur. Onlar─▒ desteklemeyen taray─▒c─▒lar yaln─▒zca daha fazla ba┼čvuruda bulunmayan bir dize de─či┼čkeni g├Ârecektir. B├Âylece, ├╝st├╝nden ge├žip devam edecekler.


12







use strict kodunuzu daha g├╝venli hale getirmenin bir yoludur, ├ž├╝nk├╝ bekledi─činiz gibi ├žal─▒┼čmayan tehlikeli ├Âzellikleri kullanamazs─▒n─▒z. Ve kodu daha kat─▒ hale getirmeden ├Ânce yaz─▒ld─▒─č─▒ gibi.


11







Strict Kullan, genel ve tekrarlanan hatalar─▒ g├Âstermek i├žin kullan─▒l─▒r; b├Âylece farkl─▒ ┼čekilde ele al─▒n─▒r ve java beti─činin ├žal─▒┼čma ┼čeklini de─či┼čtirir, bu de─či┼čiklikler ┼čunlard─▒r:

  • Kazara globralleri ├Ânler

  • Kopya yok

  • ─░le ortadan kald─▒r─▒r

  • Bu zorlamay─▒ ortadan kald─▒r─▒r

  • Daha g├╝venli eval ()

  • De─či┼čmezler i├žin hatalar

ayr─▒nt─▒lar i├žin bu makaleyi de okuyabilirsiniz


11







Normalde, JavaScript kat─▒ kurallara uymaz, bu nedenle hata ┼čans─▒n─▒ artt─▒r─▒r. "use strict" JavaScript kodunu kulland─▒ktan sonra , sonland─▒r─▒c─▒lar─▒n kullan─▒m─▒, ba┼člatma ├Âncesi bildirim vb. Gibi di─čer programlama dillerinde oldu─ču gibi kat─▒ kurallara uymal─▒s─▒n─▒z.

E─čer "use strict" kullan─▒l─▒yorsa, kod kat─▒ bir kurallar dizisi uygulanarak yaz─▒lmal─▒d─▒r, bu nedenle hata ve belirsizlik ihtimalini azalt─▒r.


11







"s─▒k─▒ kullan"; JavaScript kodunun "kat─▒ modda" ├žal─▒┼čt─▒r─▒lmas─▒ gerekti─čini tan─▒mlar.

  • ECMAScript s├╝r├╝m 5ÔÇÖte "use strict" y├Ânergesi yeniydi.
  • Bu bir ifade de─čil, ├Ânceki s├╝r├╝mlerde JavaScript taraf─▒ndan yok say─▒lan bir ifadedir.
  • "S─▒k─▒ kullan" ─▒n amac─▒, kodun "kat─▒ modda" y├╝r├╝t├╝lmesi gerekti─čini belirtmektir.
  • Kat─▒ modda, ├Ârne─čin bildirilmemi┼č de─či┼čkenleri kullanamazs─▒n─▒z.

T├╝m modern taray─▒c─▒lar, Internet Explorer 9 ve alt─▒ d─▒┼č─▒nda "kat─▒ kullan─▒m─▒" destekler .

dezavantaj

Bir geli┼čtirici kat─▒ modda bir kitapl─▒k kulland─▒ysa, ancak geli┼čtirici normal modda ├žal─▒┼č─▒yorsa, kitapl─▒kta beklendi─či gibi ├žal─▒┼čmayan baz─▒ eylemler ├ža─č─▒rabilirdi.

Daha k├Ât├╝s├╝, geli┼čtirici normal modda oldu─čundan, fazladan hatalar─▒n at─▒lma avantajlar─▒ yoktur, bu nedenle hata sessizce ba┼čar─▒s─▒z olabilir.

Ayr─▒ca, yukar─▒da listelendi─či gibi, kat─▒ mod baz─▒ ┼čeyleri yapman─▒za engel olur.

─░nsanlar genellikle bu ┼čeyleri ilk ba┼čta kullanmaman─▒z gerekti─čini d├╝┼č├╝n├╝r, ancak baz─▒ geli┼čtiriciler k─▒s─▒tlamay─▒ sevmez ve dilin t├╝m ├Âzelliklerini kullanmak ister.


6







S─▒k─▒ mod, bellek s─▒z─▒nt─▒lar─▒n─▒ ├Ânleyebilir.

L├╝tfen kat─▒ olmayan modda yaz─▒lm─▒┼č a┼ča─č─▒daki i┼člevi kontrol edin:

 function getname(){
    name = "Stack Overflow"; // Not using var keyword
    return name;
}
getname();
console.log(name); // Stack Overflow
 

Bu fonksiyonda, fonksiyon name i├žinde denilen bir de─či┼čken kullan─▒yoruz . Dahili olarak, derleyici ilk ├Ânce o belirli fonksiyon kapsam─▒nda bu isimle belirtilen bir de─či┼čken olup olmad─▒─č─▒n─▒ kontrol edecektir. Derleyici b├Âyle bir de─či┼čken olmad─▒─č─▒n─▒ anlad─▒─č─▒ndan, d─▒┼č kapsamda kontrol eder. Bizim durumumuzda k├╝resel kapsamd─▒r. Yine, derleyici, ayn─▒ zamanda bu alanda k├╝resel alanda ilan edilmi┼č bir de─či┼čken olmad─▒─č─▒n─▒ da anlad─▒, bu y├╝zden bizim i├žin k├╝resel alanda b├Âyle bir de─či┼čken yaratt─▒. Kavramsal olarak, bu de─či┼čken k├╝resel kapsamda yarat─▒lacak ve t├╝m uygulamada mevcut olacak.

Ba┼čka bir senaryo, de─či┼čkenin bir ├žocuk fonksiyonunda bildirildi─čidir. Bu durumda, derleyici bu de─či┼čkenin ge├žerlili─čini d─▒┼č kapsamdaki, yani ana i┼člevdeki kontrol eder. Ancak o zaman k├╝resel uzay─▒ kontrol edecek ve bizim i├žin orada bir de─či┼čken yaratacakt─▒r. Bu, ek kontrollerin yap─▒lmas─▒ gerekti─či anlam─▒na gelir. Bu, uygulaman─▒n performans─▒n─▒ etkileyecektir.


┼×imdi ayn─▒ i┼člevi kat─▒ modda yazal─▒m.

 "use strict"
function getname(){
    name = "Stack Overflow"; // Not using var keyword
    return name;
}
getname();
console.log(name); 
 

A┼ča─č─▒daki hatay─▒ alaca─č─▒z.

 Uncaught ReferenceError: name is not defined
at getname (<anonymous>:3:15)
at <anonymous>:6:5
 

Burada, derleyici referans hatas─▒ veriyor. S─▒k─▒ modda, derleyici, de─či┼čkeni bildirmeden kullanmam─▒za izin vermez. B├Âylece haf─▒za s─▒z─▒nt─▒lar─▒ ├Ânlenebilir. Ayr─▒ca daha iyi kod yazabiliriz.


3



─░lgili yay─▒nlar


ÔÇťStatik olmayan y├Ântem statik bir ba─člamdan kaynaklanamazÔÇŁ ─▒n arkas─▒ndaki sebep nedir? [├žift]

~~ (ÔÇťdouble tildeÔÇŁ) Javascript'te ne yapar?

Cbegin / cend'in arkas─▒ndaki sebep nedir?

[] .ForEach.call () JavaScript'te ne yapar?

Javascript ithalat─▒nda @ sembol├╝ ne yapar?

C++ ile "using" anahtar s├Âzc├╝─č├╝n├╝n arkas─▒ndaki mant─▒k nedir?

Java G├╝nl├╝─č├╝ ├žer├ževelerinde belirte├žler nelerdir ve bunlar─▒ kullanmak i├žin neden nedir?

JavaScript ifadelerinde virg├╝l ne yapar?

PHP'de kat─▒ t├╝rler ne yapar?

Std :: unique_ptr nas─▒l bildirilir ve bunun kullan─▒m─▒ nedir?

Etiketle ilgili di─čer sorular [javascript]


Windows i├žin Visual Studio Kodunda kod b├Âl├╝mlerini nas─▒l daraltabilirim?

Bir fonksiyonun kaynak kodunu nas─▒l g├Ârebilirim?

Server.MapPath (ÔÇť.ÔÇŁ), Server.MapPath (ÔÇť~ÔÇŁ), Server.MapPath (@ ÔÇť\ÔÇŁ), Server.MapPath (ÔÇť/ÔÇŁ). Fark ne?

Typedef i┼člev g├Âstergesi?

─░mzas─▒z Tam Say─▒lara Kar┼č─▒ ─░mzal─▒

─░ki MySQL veritaban─▒n─▒ kar┼č─▒la┼čt─▒r─▒n [kapal─▒]

Kesme noktas─▒ ┼ču anda ├žarp─▒lmayacak. Silverlight uygulamas─▒nda bu belge i├žin sembol y├╝klenmedi

MongoDB'den rastgele kay─▒t

PHP'de (bo┼č) diziyi ba┼člatman─▒n en iyi yolu

Varl─▒k ├çer├ževesi. Tablodaki t├╝m sat─▒rlar─▒ sil