美文网首页
ES5之后的严格模式

ES5之后的严格模式

作者: 小龙虾Julian | 来源:发表于2018-08-23 17:41 被阅读0次

从ES5开始,函数内部可以设定为严格模式,如:

function doSomething(a, b) {
  'use strict';
  // code
}

ES2016 做了一点修改,规定只要函数参数使用了默认值、解构赋值、或者扩展运算符,那么函数内部就不能显式设定为严格模式,否则会报错。报错的原因在于函数执行的时候先执行参数,然后再执行函数体,然而在函数参数执行时是不会报错的(比如我设置了默认值),但是执行到函数体时发现需要执行严格模式,所以自然会报错

// 报错
function doSomething(a, b = a) {
  'use strict';
  // code
}

// 报错
const doSomething = function ({a, b}) {
  'use strict';
  // code
};

// 报错
const doSomething = (...a) => {
  'use strict';
  // code
};

const obj = {
  // 报错
  doSomething({a, b}) {
    'use strict';
    // code
  }
};

这样规定的原因是,函数内部的严格模式,同时适用于函数体和函数参数。但是,函数执行的时候,先执行函数参数,然后再执行函数体。这样就有一个不合理的地方,只有从函数体之中,才能知道参数是否应该以严格模式执行,但是参数却应该先于函数体执行。

// 报错
function doSomething(value = 070) {
  'use strict';
  return value;
}

上面代码中,参数value的默认值是八进制数070,但是严格模式下不能用前缀0表示八进制,所以应该报错。但是实际上,JavaScript 引擎会先成功执行value = 070,然后进入函数体内部,发现需要用严格模式执行,这时才会报错。

虽然可以先解析函数体代码,再执行参数代码,但是这样无疑就增加了复杂性。因此,标准索性禁止了这种用法,只要参数使用了默认值、解构赋值、或者扩展运算符,就不能显式指定严格模式。

两种方法可以规避这种限制。第一种是设定全局性的严格模式,这是合法的。

'use strict';

function doSomething(a, b = a) {
  // code
}

第二种是把函数包在一个无参数的立即执行函数里面。

const doSomething = (function () {
  'use strict';
  return function(value = 42) {
    return value;
  };
}());

相关文章

  • ES5之后的严格模式

    从ES5开始,函数内部可以设定为严格模式,如: ES2016 做了一点修改,规定只要函数参数使用了默认值、解构赋值...

  • JavaScript严格模式

    严格模式 在ES5引入,为了让团队开发更为便利、严谨,使用"use strict"开启严格模式。 变量必须声明之后...

  • ES5和ES6

    ES5 严格模式 1. 理解: 除了正常运行模式(混杂模式),ES5添加了第二种运行模式:"严格模式"(stric...

  • 2018-09-29

    ES5 严格模式 1. 理解: 除了正常运行模式(混杂模式),ES5添加了第二种运行模式:"严格模式"(stric...

  • ES5、ES6、ES7

    ES5 严格模式 1. 理解: * 除了正常运行模式(混杂模式),ES5添加了第二种运行模式:"严格模式"(str...

  • 4-1

    ES5 严格模式 1. 理解:* 除了正常运行模式(混杂模式),ES5添加了第二种运行模式:"严格模式"(stri...

  • ES5 ES6

    ES5 严格模式: "use strict"; 严格模式对正常的 JavaScript语义做了一些更改。严格模式通...

  • 2018-12-15

    ES5 严格模式: "use strict"; 严格模式对正常的 JavaScript语义做了一些更改。严格模式通...

  • 严格模式的限制

    "use strict";ES6 的模块自动采用严格模式;严格模式是 ES5 引入的; 严格模式主要有以下限制。 ...

  • ES5-6-7学习

    ES5中的特性 一、严格模式 'use strict' 1. 理解: 除了正常运行模式(混杂模式),ES5添加了第...

网友评论

      本文标题:ES5之后的严格模式

      本文链接:https://www.haomeiwen.com/subject/nrpmiftx.html