JSLint is suddenly reporting: Use the function form of "use strict"

JavascriptJslint

Javascript Problem Overview


I include the statement:

"use strict";

at the beginning of most of my Javascript files.

JSLint has never before warned about this. But now it is, saying:

>Use the function form of "use strict".

Does anyone know what the "function form" would be?

Javascript Solutions


Solution 1 - Javascript

Include 'use strict'; as the first statement in a wrapping function, so it only affects that function. This prevents problems when concatenating scripts that aren't strict.

See Douglas Crockford's latest blog post Strict Mode Is Coming To Town.

Example from that post:

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

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

Update: In case you don't want to wrap in immediate function (e.g. it is a node module), then you can disable the warning.

For JSLint (per Zhami):

/*jslint node: true */

For JSHint:

/*jshint strict:false */

or (per Laith Shadeed)

/* jshint -W097 */

To disable any arbitrary warning from JSHint, check the map in JSHint source code (details in docs).

Update 2: JSHint supports node:boolean option. See .jshintrc at github.

/* jshint node: true */

Solution 2 - Javascript

If you're writing modules for NodeJS, they are already encapsulated. Tell JSLint that you've got node by including at the top of your file:

/*jslint node: true */

Solution 3 - Javascript

I'd suggest to use jshint instead.

It allows to suppress this warning via /*jshint globalstrict: true*/.

If you are writing a library, I would only suggest using global strict if your code is encapsulated into modules as is the case with nodejs.

Otherwise you'd force everyone who is using your library into strict mode.

Solution 4 - Javascript

I started creating a Node.js/browserify application following the Cross Platform JavaScript blog post. And I ran into this issue, because my brand new Gruntfile didn't pass jshint.

Luckily I found an answer in the Leanpub book on Grunt:

> If we try it now, we will scan our Gruntfile… and get some errors: > > $ 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. > > Both errors are because the Gruntfile is a Node program, and by default JSHint does not recognise or allow the use of module and the string version of use strict. We can set a JSHint rule that will accept our Node programs. Let’s edit our jshint task configuration and add an options key: > > jshint: { > options: { > node: true > }, > }

Adding node: true to the jshint options, to put jshint into "Node mode", removed both errors for me.

Solution 5 - Javascript

Add a file .jslintrc (or .jshintrc in the case of jshint) at the root of your project with the following content:

{
	"node": true
}

Solution 6 - Javascript

There's nothing innately wrong with the string form.

Rather than avoid the "global" strict form for worry of concatenating non-strict javascript, it's probably better to just fix the damn non-strict javascript to be strict.

Solution 7 - Javascript

process.on('warning', function(e) {
    'use strict';
    console.warn(e.stack);
});
process.on('uncaughtException', function(e) {
    'use strict';
    console.warn(e.stack);
});

add this lines to at the starting point of your file

Solution 8 - Javascript

I think everyone missed the "suddenly" part of this question. Most likely, your .jshintrc has a syntax error, so it's not including the 'browser' line. Run it through a json validator to see where the error is.

Solution 9 - Javascript

This is how simple it is: If you want to be strict with all your code, add "use strict"; at the start of your JavaScript.

But if you only want to be strict with some of your code, use the function form. Anyhow, I would recomend you to use it at the beginning of your JavaScript because this will help you be a better coder.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionZhamiView Question on Stackoverflow
Solution 1 - JavascriptbdukesView Answer on Stackoverflow
Solution 2 - JavascriptZhamiView Answer on Stackoverflow
Solution 3 - JavascriptThorsten LorenzView Answer on Stackoverflow
Solution 4 - JavascriptqrisView Answer on Stackoverflow
Solution 5 - JavascriptSahil AhujaView Answer on Stackoverflow
Solution 6 - JavascriptglycoslaveView Answer on Stackoverflow
Solution 7 - JavascriptHoudiniView Answer on Stackoverflow
Solution 8 - JavascriptDirigibleView Answer on Stackoverflow
Solution 9 - JavascriptJason StackhouseView Answer on Stackoverflow