Yanıtlar:
'use strict';
Bir kaydırma işlevine ilk ifade olarak dahil edilir, böylece yalnızca bu işlevi etkiler. Bu, katı olmayan komut dosyalarını birleştirirken sorunları önler.
Douglas Crockford'un son blog yazısı için Strict Mode Is Coming To Town .
Bu yayından örnek:
(function () {
'use strict';
// this function is strict...
}());
(function () {
// but this function is sloppy...
}());
Güncelleme: Anında işlev sarmak istemiyorsanız (örneğin, bir düğüm modülüdür), uyarıyı devre dışı bırakabilirsiniz.
İçin Multi-Meter (başına Zhami ):
/*jslint node: true */
İçin JSHint :
/*jshint strict:false */
veya ( Laith Shadeed başına )
/* jshint -W097 */
JSHint'ten keyfi bir uyarıyı devre dışı bırakmak için, JSHint kaynak kodundaki ( dokümanlardaki ayrıntılar ) haritayı kontrol edin .
Güncelleme 2: JSHintnode:boolean
seçeneği destekler . .jshintrc
Github'a bakınız .
/* jshint node: true */
-1
/*jshint strict:false */
Ne yaptığınızı daha net hale getirmek için bir alternatif olacaktır (sayısal kodunuzda bilmediğim belirli bir fayda yoksa)
"use strict";
kez belirtmek için bir IIFE içine sarabilirsiniz .
NodeJS için modül yazıyorsanız, bunlar zaten kapsüllenmiştir. JSLint'e dosyanızın üst kısmına dahil ederek düğümünüz olduğunu söyleyin:
/*jslint node: true */
/*jshint strict:false */
"node": true
.Jshintrc
Bunun yerine jshint kullanmanızı öneririm .
Bu uyarının üzerinden bastırılmasını sağlar /*jshint globalstrict: true*/
.
Bir kitaplık yazıyorsanız, yalnızca kodunuz modüller halinde nodejs'lerde olduğu gibi global katı kullanılmasını öneririm.
Aksi takdirde, kitaplığınızı kullanan herkesi katı moda zorlarsınız.
strict: 'global'
Şimdi deneyin ve bkz. Jshint.com/docs/options/#globalstrict
Cross Platform JavaScript blog gönderisini takiben bir Node.js / browserify uygulaması oluşturmaya başladım . Bu sorunla karşılaştım, çünkü yeni Gruntfile'm jshint'i geçmedi.
Neyse ki Grunt hakkındaki Leanpub kitabında bir cevap buldum :
Şimdi denersek, Gruntfile'ımızı tararız ve bazı hatalar alırız:
$ grunt jshint Running "jshint:all" (jshint) task Linting Gruntfile.js...ERROR [L1:C1] W097: Use the function form of "use strict". 'use strict'; Linting Gruntfile.js...ERROR [L3:C1] W117: 'module' is not defined. module.exports = function (grunt) { Warning: Task "jshint:all" failed. Use --force to continue.
Her iki hata da Gruntfile bir Düğüm programı olduğundan ve varsayılan olarak JSHint'in
module
ve dize sürümünü tanımıyor veya kullanımına izin vermiyoruse strict
. Düğüm programlarımızı kabul edecek bir JSHint kuralı belirleyebiliriz. Şimdi jshint görev yapılandırmamızı düzenleyelim ve bir seçenek anahtarı ekleyelim:jshint: { options: { node: true }, }
node: true
Jshint'i ekleyerek , jshint'i options
"Düğüm moduna" koymak için her iki hatayı da benim için kaldırdı.
Aşağıdaki içeriğe sahip bir projenin köküne .jslintrc (veya jshint durumunda .jshintrc) dosyası ekleyin:
{
"node": true
}
Dize formunda doğal olarak yanlış bir şey yoktur.
Sıkı olmayan javascript'i birleştirmekten endişe etmek için "küresel" katı formdan kaçınmaktan ziyade, sadece katı olmayan javascript'i katı olarak düzeltmek daha iyidir.
Bence herkes bu sorunun "aniden" bölümünü kaçırdı. Büyük olasılıkla, .jshintrc'nizde bir sözdizimi hatası vardır, bu nedenle 'tarayıcı' satırını içermez. Hatanın nerede olduğunu görmek için bir json doğrulayıcı aracılığıyla çalıştırın.
Bu kadar basit: Tüm kodlarınızla ilgili katı olmak istiyorsanız "use strict";
, JavaScript'inizin başına ekleyin .
Ancak, kodunuzun yalnızca bir kısmıyla ilgili katı olmak istiyorsanız, işlev formunu kullanın. Her neyse, JavaScript'inizin başında kullanmanızı tavsiye ederim, çünkü bu daha iyi bir kodlayıcı olmanıza yardımcı olacaktır.
"use strict";
JS dosyamın üstüne koyduğumda bu hatayı alıyorum , bu yüzden bu tamamen doğru olmayabilir.
"use strict";
kodunuzun en üstüne yerleştirildiği "global" biçimini kabul etmez . Yalnızca "use strict;"
bir işleve sarıldığında izin verir . (JS_Hint_, genel formu kullanmanıza izin verir - gerekli ayar için yukarıdaki cevaba bakın).