ES6'da “katı kullanın” kullanılması önerilmez mi?


201

Henüz ECMAScript 6'ya aşina değilim. Ben sadece uygulama kodu için ES6 kullanan React Başlangıç ​​Kiti repo klonladım. Linter'in, ES6 öncesi JavaScript'te önerildiğini düşündüğüm yönerge oluşumlarını yasaklamak için yapılandırıldığını görünce şaşırdım use strict. Ne anlamı var?



Yanıtlar:


257

ES6 modülleri her zaman katı moddadır. Spesifikasyonun ilgili kısmını alıntılamak için :

10.2.1 Katı Mod Kodu

ECMAScript Script sözdizimsel birimi, kısıtlanmamış veya katı mod sözdizimi ve anlambilimi kullanılarak işlenebilir. Kod, aşağıdaki durumlarda katı mod kodu olarak yorumlanır:

  • Genel kod, Sıkı Kullanım Direktifi içeren bir Direktif Prologuyla başlarsa katı mod kodudur (bkz. 14.1.1).
  • Modül kodu her zaman katı mod kodudur.
  • Bir ClassDeclaration veya bir ClassExpression öğesinin tüm bölümleri katı mod kodudur.
  • Eval kodu, Use Strict Directive içeren bir Directive Prologue ile başlarsa veya eval çağrısı doğrudan katı mod kodunda bulunan bir doğrudan eval (bkz. 12.3.4.1) ise katı mod kodudur.
  • İlişkili FunctionDeclaration, FunctionExpression, GeneratorDeclaration, GeneratorExpression, MethodDefinition veya ArrowFunction, katı mod kodunda bulunuyorsa veya işlevin [[ECMAScriptCode]] iç yuvasının değerini üreten kod bir Directive Prologue ile başlıyorsa işlev kodu katı mod kodudur. Sıkı Kullan Direktifi içeren.
  • Son işlev, işlendiğinde Sıkı Kullanım Yönergesi içeren bir Yönerge Prolog ile başlayan bir FunctionBody ise, yerleşik Function ve Generator yapıcılarına bağımsız değişkenler olarak sağlanan işlev kodu katı mod kodudur.

11
Global kod ile modül kodu arasındaki fark nedir? Sanırım modül kodu bana modül modülünde her şey anlamına gelir çünkü yanlış anlıyorum ('modül').
Mayıs

8
@BrynnMahsman ES2015 yerel modüllere sahiptir. CommonJS sadece bir kütüphanedir ve dil ile ilgisi yoktur.
Kit Sunde

18
Yanıtınız için teşekkürler. Peki, içe / dışa aktarma anahtar sözcüklerini kullanmıyorsa bir ES6 modülü değil mi? Şu anda Node 4 kullanıyorum ve anahtar kelimeleri içe / dışa aktarma erişimim yok ve sadece CommonJS module.exports'u kullanıyorum ve varsayılan olarak etkin ES6 özellikleriyle birlikte requir () kullanıyorum. Neden her dosyanın üstüne katı kullanmak zorunda kaldım. Teknik olarak hala V8'de etkinleştirilmiş bazı ES6 özelliklerine sahip CommonJS modülleri yazıyorum?
Mayıs

7
Ayrıntılı bir inceleme için "bu bir modül var?" , bkz. nczonline.net/blog/2016/04/… "... içe aktarma veya dışa aktarmanın varlığı bir modülü gösterebilirken, içe aktarma veya dışa aktarma eksikliği dosyanın bir modül olmadığını açıkça göstermez. ayrıştırma sırasında bir dosyanın bir modül olduğunu otomatik olarak algılamanın etkili bir yolu yoktur. "
ptim

1
"Modül" tam olarak nedir? Sadece oluşan bir komut dosyasında strict( AirBnB hazır ayarlı ) hatayı alıyorum "use strict"; console.log('foo'). Bu bir modül mü?
Dan Dascalescu
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.