Pertanyaan Apa itu mode perpanjangan?


Saya bermain-main dengan let di Node v0.10.12. Menggunakan --harmony Tandai kode berikut menghasilkan kesalahan sintaks:

for (let i = 0; i < 2; i += 1) {
    console.log('i', i);
}

SyntaxError: Illegal let declaration di luar mode extended

Namun, jika saya juga menggunakan --use-strict bendera, maka kode berjalan seperti yang diharapkan.

Mengapa kesalahan sintaks dilemparkan saat hanya menggunakan --harmony bendera? Apa itu mode perpanjangan? Apa hubungannya dengan mode ketat?


32
2018-06-22 17:38


asal


Jawaban:


Sepertinya "mode perpanjangan" telah dihapus dari versi pengembangan saat ini dari spesifikasi harmoni pada 27 Februari 2012, tetapi ada deskripsi tentang apa yang seharusnya ada di beberapa yang lebih tua (yang ini adalah dari 16 Januari 2012):

10.1.2 Kode Diperpanjang

Kode yang diperluas adalah kode apa pun yang terkandung dalam sintaksis Program ECMAScript   unit yang berisi kejadian produksi leksikal atau sintaksis   ditentukan setelah Edisi Kelima dari ECMAScript   spesifikasi. Kode ditafsirkan sebagai kode diperpanjang di berikut ini   situasi:

  • Kode global adalah kode global yang diperluas jika terkandung dalam unit sintaksis Program ECMAScript yang telah ditetapkan sebagai   unit Program diperpanjang dalam cara yang ditentukan implementasi atau jika ???.

  • Kode Eval adalah kode eval diperpanjang jika panggilan untuk eval adalah panggilan langsung (lihat 15.1.2.1.1) ke fungsi eval yang terkandung dalam   kode mode diperpanjang atau jika dimulai dengan ???.

  • Kode fungsi yang merupakan bagian dari FunctionDeclaration, FunctionExpression, atau pengakses PropertyAssignment adalah kode fungsi diperpanjang jika FunctionDeclaration, FunctionExpression, atau    PropertyAssignment terkandung dalam kode mode diperpanjang atau jika kode fungsi dimulai dengan ???.

  • Kode fungsi yang disediakan sebagai argumen terakhir ke konstruktor Fungsi bawaan adalah kode fungsi yang ketat jika argumen terakhir adalah a   String itu ketika diproses sebagai FunctionBody dimulai dengan ???.

Istilah "kode ketat" digunakan untuk menetapkan kedua mode ketat yang sebenarnya   kode dan kode tambahan sementara istilah "kode diperpanjang" hanya menunjuk   kode diperpanjang sebenarnya. Istilah "kode dasar" digunakan untuk menetapkan kode   kode yang tidak diperpanjang.

Adapun koneksi dengan mode ketat, yang tampaknya khusus untuk V8 (percobaan) implementasi. Inilah yang changelog untuk revisi 10062, yang memperkenalkan --harmony bendera, mengatakan:

CL ini memperkenalkan mode ketiga di samping yang tidak ketat (untuk selanjutnya   disebut 'mode klasik') dan 'mode ketat' yang disebut 'diperpanjang   mode 'seperti dalam draft spesifikasi ES.next saat ini. Diperpanjang   mode didasarkan pada 'mode ketat' dan menambahkan fungsi baru ke dalamnya.   Ini berarti bahwa sebagian besar semantik dari dua mode ini bertepatan.

'Mode diperpanjang' dimasukkan sebagai ganti 'mode ketat' selama   parsing ketika menggunakan arahan "mode ketat" "gunakan ketat" dan kapan   bendera harmoni-scoping aktif.  Ini harus diubah setelah itu   sepenuhnya ditentukan bagaimana 'mode diperpanjang' dimasukkan.


15
2018-06-22 19:03



Cara mendapatkan harmoni di node.js Anda

Itu --harmony bendera memungkinkan Fitur ES Harmony. tampaknya --harmony memungkinkan fitur ECMA baru dalam bahasa, berdasarkan pada v8, proksi, peta lemah, set, peta, jenis semantik, dan pencakupan blok tersedia saat bendera ini digunakan dan ini adalah fitur yang diperluas dan setelah memperluas fitur ini yang dapat Anda gunakan misalnya let (untuk pemblokiran blok) dengan strict mode diaktifkan hanya karena didasarkan pada itu, jika tidak ia akan melempar

SyntaxError: Illegal let declaration di luar mode extended.

Mode yang Diperpanjang: Saat Anda menggunakan yang baru ECMA fitur (ECMAScript 5), Anda berada dalam mode perluasan bahasa dan dalam mode ini fitur baru ECMAScript (kode diperpanjang) dan sintaks hanya dapat digunakan di mode ketat

Konsep "kode diperpanjang" yang berarti kode yang dapat menggunakan Es.next baru   sintaksis.

Harmoni :

"Harmony" adalah nama peningkatan besar untuk JavaScript yang akan tiba pada akhir tahun 2013. Pada tahun 2008, setelah banyak kontroversi, Komite Teknis ECMA 39, yang telah ditagih untuk menciptakan JavaScript generasi berikutnya, setuju untuk bekerja sama. pada pembaruan "Harmony" ke JavaScript dan telah dikembangkan sejak saat itu.    Sejumlah fitur yang diusulkan of Harmony didukung oleh implementasi Google. Ini termasuk blok scoped binding dan penambahan membiarkan kata kunci, peta yang efisien dan set untuk menghapus kebutuhan untuk "penyalahgunaan objek sebagai kamus", peta lemah untuk sampah kunci / tabel nilai dan proxy yang dapat mensimulasikan objek atau fungsi JavaScript untuk mengaktifkan penyesuaian.

Beberapa bacaan bagus sini dan mendengar. Juga dari Blog Chromium.

Juga dari Paul Irish :

François Beaufort (awalnya dibagikan): Sebuah flag baru bernama Enable   Eksperimental JavaScript muncul di halaman chrome: // flags of the   Chromium versi terakhir. Bendera ini memungkinkan laman web untuk menggunakan eksperimental   Fitur JavaScript.

Untuk menggunakan fitur mode / harmoni diperpanjang sekarang di Chrome kita harus mengaktifkan ini dan kita dapat mengaktifkan ini dengan menavigasi ke chrome://flags dan dapat beralih (mengaktifkan / menonaktifkan) pada "Eksperimental fitur JavaScript".


10
2018-06-22 18:28