Pregunta JSLint informa de repente: use la forma de función de "use strict"


Incluyo la declaración:

"use strict";

al comienzo de la mayoría de mis archivos Javascript

JSLint nunca antes ha advertido sobre esto. Pero ahora lo es, diciendo:

Use la forma de función de "use strict".

¿Alguien sabe cuál sería la "forma de función"?


850
2017-12-16 15:36


origen


Respuestas:


Incluir 'use strict'; como la primera instrucción en una función de ajuste, por lo que solo afecta a esa función. Esto evita problemas al concatenar scripts que no son estrictos.

Vea la última publicación de blog de Douglas Crockford El modo estricto está llegando a la ciudad.

Ejemplo de esa publicación:

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

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

Actualizar: En caso de que no desee envolver la función inmediata (por ejemplo, es un módulo de nodo), puede desactivar la advertencia.

por JSLint (por Zhami)

/*jslint node: true */

por JSHint:

/*jshint strict:false */

o (por Laith Shadeed)

/* jshint -W097 */

Para desactivar cualquier advertencia arbitraria de JSHint, verifique el mapa en Código fuente JSHint (detalles en documentos)

Actualización 2:  JSHint apoyos node:boolean opción. Ver .jshintrc en github.

/* jshint node: true */

937
2017-12-16 15:44



Si está escribiendo módulos para NodeJS, ya están encapsulados. Dile a JSLint que tienes un nodo incluyendo en la parte superior de tu archivo:

/*jslint node: true */

214
2017-07-07 12:38



Sugeriría usar jshint en lugar.

Permite suprimir esta advertencia a través de /*jshint globalstrict: true*/.

Si está escribiendo una biblioteca, solo sugeriría usar global strict si su código está encapsulado en módulos como es el caso de nodejs.

De lo contrario, obligarías a todos los que usan tu biblioteca a un modo estricto.


69
2017-10-12 14:58



No hay nada innatamente incorrecto con la forma de cadena.

En lugar de evitar la forma estricta "global" de preocuparse de concatenar JavaScript no estricto, probablemente sea mejor arreglar el maldito javascript no estricto para que sea estricto.


15
2018-05-25 05:48



Empecé a crear una aplicación Node.js / browserify siguiendo el JavaScript de plataforma cruzada entrada en el blog. Y me encontré con este problema, porque mi nuevo Gruntfile no pasó jshint.

Afortunadamente encontré una respuesta en el Leanpub libro sobre Grunt:

Si lo intentamos ahora, escanearemos nuestro Gruntfile ... y obtendremos algunos errores:

$ 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 errores se deben a que Gruntfile es un programa Node, y por defecto JSHint no reconoce ni permite el uso de module y la versión de cadena de use strict. Podemos establecer una regla JSHint que aceptará nuestros programas Node. Editemos nuestra configuración de tareas jshint y agreguemos una clave de opciones:

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

Añadiendo node: true al jshint options, para poner jshint en "Modo de nodo", eliminé ambos errores.


15
2018-05-31 07:46



Agregue un archivo .jslintrc (o .jshintrc en el caso de jshint) en la raíz de su proyecto con el siguiente contenido:

{
    "node": true
}

13
2017-07-29 08:15



Creo que todos se perdieron la parte "repentina" de esta pregunta. Lo más probable es que su .jshintrc tenga un error de sintaxis, por lo que no incluye la línea 'navegador'. Ejecútelo a través de un validador json para ver dónde está el error.


0
2017-09-13 16:58