Saya telah melihat-lihat referensi JavaScript di Jaringan Pengembang Mozilla , dan saya menemukan sesuatu yang disebut "strict mode"
. Saya membacanya dan saya kesulitan memahami fungsinya. Dapatkah seseorang menjelaskan secara singkat (secara umum) apa tujuannya dan bagaimana kegunaannya?
javascript
strict-mode
nkcmr
sumber
sumber
Jawaban:
Tujuan utamanya adalah untuk melakukan pengecekan lebih lanjut.
Cukup tambahkan
"use strict";
di bagian atas kode Anda, sebelum yang lainnya.Misalnya,
blah = 33;
adalah JavaScript yang valid. Itu berarti Anda membuat variabel yang sepenuhnya globalblah
.Tetapi dalam mode ketat ini adalah kesalahan karena Anda tidak menggunakan kata kunci "var" untuk mendeklarasikan variabel.
Sebagian besar waktu Anda tidak bermaksud membuat variabel global di tengah-tengah beberapa ruang lingkup arbitrer, jadi sebagian besar waktu yang
blah = 33
ditulis itu adalah kesalahan dan pemrogram tidak benar-benar menginginkannya menjadi variabel global, maksud mereka untuk menulisvar blah = 33
.Ini juga melarang banyak hal yang secara teknis valid untuk dilakukan.
NaN = "lol"
tidak menghasilkan kesalahan. Itu juga tidak mengubah nilai NaN. Menggunakan ketat ini (dan pernyataan aneh serupa) menghasilkan kesalahan. Kebanyakan orang menghargai ini karena tidak ada alasan untuk pernah menulisNaN = "lol"
, jadi kemungkinan besar ada kesalahan ketik.Baca lebih lanjut di halaman MDN tentang mode ketat .
sumber
Salah satu aspek dari mode ketat yang belum disebutkan dalam jawaban Simon adalah mode ketat diatur
this
keundefined
dalam fungsi yang dipanggil melalui pemanggilan fungsi.Jadi hal seperti ini
function Obj() { this.a = 12; this.b = "a"; this.privilegedMethod = function () { this.a++; privateMethod(); }; function privateMethod() { this.b = "foo"; } }
akan menyebabkan kesalahan saat
privateMethod
dipanggil (karena Anda tidak dapat menambahkan properti keundefined
), daripada menambahkanb
properti ke objek global secara tidak berguna.sumber
privateMethod.bind(this)();
dan menelepon dengannew
jsbin.com
Mode ketat ditambahkan sehingga akan ada subset ECMAScript yang dapat dianalisis secara statis dengan mudah yang akan menjadi target yang baik untuk versi bahasa yang akan datang. Mode ketat juga dirancang dengan harapan bahwa pengembang yang membatasi diri pada mode ketat akan membuat lebih sedikit kesalahan dan bug yang mereka buat akan terwujud dengan cara yang lebih jelas.
Harmoni , yang diharapkan akan menjadi versi utama ECMAScript berikutnya akan dibangun di atas ES5 yang ketat.
Beberapa eksperimen bahasa lain juga bergantung pada mode ketat. SES bergantung pada analisis mode ketat ES5.
Lampiran C dari standar menjelaskan perbedaan antara mode ketat dan mode normal.
sumber
Memanggil Mode Ketat dalam Kode
Mode ketat berlaku untuk seluruh skrip atau fungsi individu. Ini tidak berlaku untuk pernyataan blok yang diapit oleh {} kurung kurawal, mencoba menerapkannya ke konteks seperti itu tidak akan menghasilkan apa-apa.
Seluruh Script:
Katakanlah kita membuat app.js, jadi menambahkan skrip penggunaan pernyataan pertama akan memberlakukan mode ketat untuk seluruh kode.
// app.js whole script in strict mode syntax “use strict”; // Now you can start writing your code
Mode ketat untuk fungsi:
Untuk menjalankan mode ketat suatu fungsi, letakkan pernyataan yang tepat "gunakan ketat"; di awal badan fungsi sebelum pernyataan lainnya.
function yourFunc(){ "use strict"; // Your function code logic }
Mode ketat menggabungkan beberapa perubahan pada semantik JavaScript normal. Pertama, mode ketat menghilangkan beberapa kesalahan diam JavaScript dengan mengubahnya menjadi kesalahan lempar.
Misalnya: Kode menggunakan Mode Ketat
Dalam contoh kode di atas, tanpa menggunakan mode ketat dalam kode, itu tidak akan menimbulkan kesalahan. Karena kita mengakses variabel
x
tanpa mendeklarasikannya. Jadi dalam mode ketat, mengakses variabel yang tidak dideklarasikan akan menimbulkan kesalahan.Sekarang mari kita coba mengakses variabel, x, tanpa mendeklarasikannya tanpa mode ketat.
(function(){ x = 3; })(); // Will not throw an error
Keuntungan menggunakan mode ketat:
sumber
Mode ketat membuat beberapa perubahan pada semantik JavaScript normal.
mode ketat menghilangkan beberapa kesalahan diam JavaScript dengan mengubahnya menjadi kesalahan lempar.
mode ketat memperbaiki kesalahan yang menyulitkan mesin JavaScript untuk melakukan pengoptimalan.
mode ketat melarang beberapa sintaks yang kemungkinan besar akan didefinisikan dalam versi ECMAScript yang akan datang.
sumber
ECMAScript5
memperkenalkan beberapa objek dan properti baru dan juga yang disebut"strict mode"
.Mode ketat adalah bagian dari bahasa yang mengecualikan fitur yang tidak digunakan lagi. Mode ketat adalah ikut serta dan tidak wajib, artinya jika Anda ingin kode Anda dijalankan dalam mode ketat, Anda menyatakan niat Anda menggunakan (sekali per fungsi, atau sekali untuk seluruh program) string berikut:
"use strict";
sumber
2017 dan akhirnya saya menemukan dokumentasinya:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode
sumber
Pertanyaan:
Berikut adalah masalah yang saya temui. Saya mengikuti tutorial dan akhirnya mencoba mengompilasi
scss
file berikut dan mencoba menghasilkan kode CSS darinya,.fatty{ width: percentage(6/7); }
menggunakan
gulpfile.js
tugas berikut :var gulp = require('gulp'); var sass = require('gulp-sass'); gulp.task('sass', function () { return gulp.src('app/scss/styles.scss') .pipe(sass()) .pipe(gulp.dest('app/css')) });
Jadi kesalahan yang saya dapatkan adalah sebagai berikut:
~/htdocs/Learning/gulp1/node_modules/gulp-sass/index.js:66 let sassMap; ^^^ SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode at exports.runInThisContext (vm.js:53:16) at Module._compile (module.js:373:25) // stacktrace here...
Larutan:
Jadi itu menunjukkan kepada saya
index.js
file yang ada di dalam modul gulp-sass saya (yang pada dasarnya terkunci dan tidak boleh diedit). Tetapi jika saya pergi dengan paksa dan menambahkan"use_strict"
di bagian atasindex.js
file itu, itu menjalankan tugas saya dengan lancar.Saya tidak berdaya, jadi saya terus menggunakan ini sebagai solusi! Tetapi kemudian setelah melalui beberapa Tanya Jawab Stack Overflow lainnya , saya melihat jawaban berikut sebagai berikut:
Dan segera setelah saya memperbarui Node.js saya (ke versi 10.x), dan kemudian membangun kembali Gulp dengan menjalankan perintah berikut sebagai Terminal, ia menginstruksikan saya:
Dan semuanya baik-baik saja. Jadi begitulah cara mengatasinya. Saya telah membatalkan perubahan yang saya lakukan untuk
index.js
file modul Gulp.js. Dan sekarang sudah lancar.sumber