1.变量必须得先申明后应用,否则报错

    'use strict'    //1.变量必须得先申明后应用,否则报错    let a = 1    v = 2

2.严格模式时,禁止this关键字指向全局对象window或gobal

    'use strict'    //2.严格模式时,禁止this关键字指向全局对象window或gobal, this为undefined    function f () {      console.log( 'this为', this ) // 此时this为undefined    }    f()


3.限度作用域

    'use strict'    //不容许应用 with语句    let o = {}    with( o ) {      x = 1    }



    'use strict'    //eval 领有本身作用域    let x = 1    eval( 'let x = 2' )    console.log( 'x为', x )


4.删除全局对象属性报错

    'use strict'    //4.删除全局对象属性报错    let x = 1    delete x

5.显示报错

    'use strict'    let obj = {      get x() { // 当x只有getter时        return 3      }    }    obj.x = 6 // 对x赋值报错



    'use strict'    let obj = {}    Object.defineProperty( obj, 'x', { // x为不可写属性, 赋值会报错      configurable: true,      writable: false,      value: 3    } )    obj.x = 6




    'use strict'    // Object.freeze() 增删改 都不行    // Object.seal() 增删 不行 改 行    // Object.preventExtensions() 增 不行 删改行    // 对以上办法的谬误调用都会报错    let obj = Object.preventExtensions( { x: 1, y: 2 } )    obj.z = 6

6.函数参数反复命名报错

function f ( x, x, y ) {}


7.函数外部 arguments 参数 不能被批改, 无奈追踪参数变动,无奈读取callee属性

function f ( x ) {      arguments = 6}

    'use strict'    function f ( x ) {      x = 666      arguments[0]      console.log( arguments[0] ) // arguments[0] 仍旧为 1    }    f(1)


'use strict'    function f ( x ) {      console.log( arguments.callee )    }

8.严格模式无奈辨认八进制示意
let  a = 012312

9.严格模式下 某些保留字无奈应用
implements, interface, let, package, private, protected, public, static, yield。