是的,它将会很严格;而且,这种严格性是继承的。
任何带有"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)
✓ inside b (no strict, var)
2) inside c (strict, no var)
✓ inside d (strict, var)
Outside Context
3) outside a (no strict, no var)
✓ outside b (no strict, var)
4) outside c (strict, no var)
✓ outside d (strict, var)