JSLint de repente está relatando: Use o formulário de function “use strict”

Eu incluo a declaração:

"use strict"; 

no começo da maioria dos meus arquivos Javascript.

O JSLint nunca antes avisou sobre isso. Mas agora é, dizendo:

Use o formulário de function “use strict”.

Alguém sabe o que seria o “formulário de function”?

Inclua 'use strict'; como a primeira instrução em uma function de quebra automática, por isso afeta apenas essa function. Isso evita problemas ao concatenar scripts que não são estritos.

Veja a última postagem no blog de Douglas Crockford que o Strict Mode está chegando à cidade .

Exemplo dessa postagem:

 (function () { 'use strict'; // this function is strict... }()); (function () { // but this function is sloppy... }()); 

Atualização: Caso você não queira include a function imediata (por exemplo, é um módulo de nó), você pode desativar o aviso.

Para JSLint (por Zhami ):

 /*jslint node: true */ 

Para JSHint :

 /*jshint strict:false */ 

ou (por Laith Shadeed )

 /* jshint -W097 */ 

Para desabilitar qualquer aviso arbitrário do JSHint, verifique o mapa no código-fonte do JSHint (detalhes em docs ).

Atualização 2: o JSHint suporta a opção node:boolean . Veja .jshintrc no github .

 /* jshint node: true */ 

Se você está escrevendo módulos para o NodeJS, eles já estão encapsulados. Diga ao JSLint que você tem o nó incluindo no topo do seu arquivo:

 /*jslint node: true */ 

Eu sugiro usar jshint em vez disso.

Permite suprimir este aviso via /*jshint globalstrict: true*/ .

Se você estiver escrevendo uma biblioteca, sugiro apenas usar o global strict se o seu código for encapsulado em módulos, como é o caso do nodejs.

Caso contrário, você forçaria todos que estão usando sua biblioteca no modo estrito.

Não há nada de errado com a forma das cordas.

Em vez de evitar a forma estrita “global” para se preocupar em concatenar javascript não-estrito, provavelmente é melhor corrigir apenas o maldito javascript não-estrito para ser estrito.

Eu comecei a criar um aplicativo Node.js / browserify seguindo a postagem de blog do Cross Platform JavaScript . E eu me deparei com esse problema, porque o meu novo Gruntfile não passou no jshint.

Por sorte, encontrei uma resposta no livro Leanpub sobre o Grunt :

Se tentarmos agora, vamos analisar o nosso Gruntfile… e obter alguns erros:

 $ 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. 

Ambos os erros ocorrem porque o Gruntfile é um programa Node e, por padrão, o JSHint não reconhece ou permite o uso de module e a versão de string de use strict . Podemos definir uma regra JSHint que aceite nossos programas Node. Vamos editar nossa configuração de tarefa jshint e adicionar uma chave de opções:

 jshint: { options: { node: true }, } 

Adicionando node: true às options jshint, para colocar jshint em “Node mode”, removi ambos os erros para mim.

Adicione um arquivo .jslintrc (ou .jshintrc no caso de jshint) na raiz do seu projeto com o seguinte conteúdo:

 { "node": true } 

Eu acho que todo mundo perdeu a parte “de repente” desta questão. Muito provavelmente, o seu .jshintrc tem um erro de syntax, por isso não está incluindo a linha ‘browser’. Execute-o através de um validador json para ver onde está o erro.

É assim tão simples: se você quiser ser rigoroso com todo o seu código, adicione "use strict"; no início do seu JavaScript.

Mas se você quiser apenas ser rigoroso com algum código, use o formulário de function. De qualquer forma, eu recomendo que você use-o no início do seu JavaScript, porque isso irá ajudá-lo a ser um melhor programador.