• ECMAScript 5 严格模式


    1. 变量必须使用var声明,杜绝不小心将本地变量声明成一个全局变量

      在常规模式下,如果我们声明一个变量时省略了var关键字,解析引擎会自动将其声明为全局变量,但在严格模式下,会直接抛出异常,不会为我们转为全局变量:  

    message = 'hello world';
    
    var color = 'red';
    delete color;

    2. 禁止函数参数重名

    3. 禁止对象属性重名

    'use strict';
    //it should throw a SyntaxError in ES5 strict mode
    var person = {
      name: 'Scott'
      name: 'John'
    };
    console.log(person.name);

    4.禁止使用八进制数字

    以0开头的八进制数字常常会让开发者迷惑,严格模式禁止以0开头的八机制表示法,另外,ES6已经支持新的语法标准,八进制以0o来表示,这样一来就与16进制的0x形成统一的语法格式: 

    'use strict';
    var a = 017;  //Uncaught SyntaxError: ...
     
    var b = 0o17; //ES6 Octal syntax: 8 + 7 = 15

    5. 强制为eval创建新作用域

    常规模式下,使用eval函数可能会影响当前作用域或全局作用域,给程序的运行结果带来不确定性,严格模式为JavaScript程序创建了第三种作用域:eval作用域。eval函数中的字符串只能在eval作用域内运行,其结果不会影响外层作用域,下面这两种形式都可以使eval在严格模式下运行:

    'use strict';
    eval("var a = 1;");
    console.log(a); //Uncaught ReferenceError: a is not defined
     
    //or
     
    eval("'use strict'; var b = 3;");
    console.log(b); //Uncaught ReferenceError: b is not defined

    6. 禁止对eval和arguments做非法操作

    以下几种使用方式都会抛出语法错误:

    使用var声明;

    赋予另一个值:

    尝试修改包含的值,如使用++;

    用作函数名;

    用作命名的函数参数;

    7.禁止使用arguments.callee

    8.禁止this指向全局

    9. 函数必须声明在整个脚本或函数层面

    'use strict';
    if (true) {
      function doSomething() {
        console.log('1');
      }
    } else {
      function doSomething() {
        console.log('2');
      }
    }
     
    for (var i = 0; i < 5; i++) {
      function doSomething() {
        console.log('3');
      }
    }
     
    doSomething();  //Uncaught ReferenceError: doSomething is not defined
     
  • 相关阅读:
    Luogu P3919【模板】可持久化数组(可持久化线段树/平衡树)
    线段树||BZOJ5194: [Usaco2018 Feb]Snow Boots||Luogu P4269 [USACO18FEB]Snow Boots G
    线段树||BZOJ1593: [Usaco2008 Feb]Hotel 旅馆||Luogu P2894 [USACO08FEB]酒店Hotel
    CF 610E. Alphabet Permutations
    BZOJ 1227: [SDOI2009]虔诚的墓主人
    BZOJ1009: [HNOI2008]GT考试
    BZOJ3674: 可持久化并查集加强版
    BZOJ3261: 最大异或和
    BZOJ2741: 【FOTILE模拟赛】L
    BZOJ3166: [Heoi2013]Alo
  • 原文地址:https://www.cnblogs.com/myzy/p/5909354.html
Copyright © 2020-2023  润新知