“use strict” 是否适用于在严格作用域中声明的函数?

3

我在jshint中看到了以下提示:

[L16:C13] W034: 不必要的指令 "use strict"。

然而,我的问题是像这样的东西是否可行..

function () {
    "use strict";

    var a = function () {
        //stuff, (is this also strict)
    }

}

“严格模式”是否会影响其他内容呢?显然,在“严格模式”声明之外的内容不会受到影响。但是,内部的其他函数是非严格模式开始,还是继承了严格模式呢?

1个回答

6

是的,它将会很严格;而且,这种严格性是继承的。

任何带有"use strict";的子作用域也将是严格模式。如果您可以声明一个封装范围为严格模式,我认为没有必要声明每个函数都是严格模式

我尝试在作用域内外都调用该函数,以确保它不会产生影响。这是使用mocha运行的测试。

var assert = require('assert');

var inside = function () {
    "use strict";
    var a = inside.a = function () {
        bar = 1;
        return bar;
    };
    var b = inside.b = function () {
        var bar = 1;
        return bar;
    };
    var c = inside.c = function () {
        "use strict";
        bar = 1;
        return bar;
    };
    var d = inside.d = function () {
        "use strict";
        var bar = 1;
        return bar;
    };

    describe('Inside Context', function () {
        it('inside a (no strict, no var)', a )
        it('inside b (no strict, var)', b )
        it('inside c (strict, no var)', c )
        it('inside d (strict, var)', d )
    } );

};

inside();

describe('Outside Context', function () {
    it('outside a (no strict, no var)', inside.a )
    it('outside b (no strict, var)', inside.b )
    it('outside c (strict, no var)', inside.c )
    it('outside d (strict, var)', inside.d )
} );

在这里,我们看到即使不使用 var 声明变量,在内部和外部声明变量都会导致测试失败,这表明 strict 工作了:

Inside Context
  1) inside a (no strict, no var)  // fail
   inside b (no strict, var) 
  2) inside c (strict, no var)     // fail
   inside d (strict, var) 

Outside Context
  3) outside a (no strict, no var)  // fail
   outside b (no strict, var) 
  4) outside c (strict, no var)     // fail
   outside d (strict, var)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接