严格模式 - pod4g/tool GitHub Wiki

三种可执行代码类型的严格模式

"use strict"; 必须放到第一行

即,

  1. 在全局下,"use strict" 必须放在第一行,否则忽略
  2. 在函数下,"use strict" 必须放在第一行,否则忽略

一个script标签内第一行使用"use strict",并不会影响其他标签。

使用 "use strict"; 来激发浏览器的严格模式,执行js代码

严格模式的兼容性:IE10+(特别注意,IE9虽然实现了ES5,但是并不支持strict mode)

在读underscore源码时,意识到了一种情况,

在严格模式下,定义不符合严格模式规范的代码并不会导致错误,只有执行到此时,才会引发错误:


 // 下面的代码并不会抛出错误

 (function() {
        "use strict";
        if(false){ // 如果为true的话,TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed
            function test(){
                console.log(arguments.callee);
            }
            test();
        }
        if(false){ // 如果为true的话,才会报 ReferenceError: test is not defined
            test = "hahah";
        }
    })();

这样设计严格模式是极好的。

例如,我们要判断一个对象是否是Arguments对象,在高级浏览器下,用toString.call(arguments)会正确返回[object Arguments], 但是在IE8-下会返回[object Object],此时,我们还需要判断这个对象是否含有arguments特有的callee属性来确定其是不是arguments对象。。 如果是在严格模式下,访问callee属性会抛出TypeError的,

但是在IE8-下,并不会有严格模式,所以也就是说,访问callee只会发生在不支持严格模式的浏览器下!所以请放心使用严格模式吧!!!

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Strict_mode