js严格模式“use strict”

js的严格模式会放弃js中的一些不正规的写法,参考 http://www.cnblogs.com/God-Shell/p/3139329.html;

使用声明"use  strict"字符串可以启动js严格模式的检查,作用方式分为两种。

1 全局开启严格模式检查

那么这个"use  strict"字符串可以声明到<script>标记(javascript文件也可以看做单独的<script>标记)内的最顶部,如下:

<script>
     "use strict"
     function a() {
            xxx
     }

</script>

这样认为在整个<script>标记内开启严格模式。如果该<script>代码块中调用了其它<script>代码块中的代码,那么存在另一个<script>代码块中的代码也不会由于该<script>中声明了"use  strict"而进行严格检查,除非另一个代码块中仍然在最顶端存在"use  strict";

2 方法内部开启严格模式检查

如果将"use  strict"字符串声明到方法内部,如下:

function a() {
    "use strict"
     var a=1;
     b();
}
function b() {
     arguments.callee.caller;//该代码不符合严格模式的用法
}

就是在a方法内部使用严格模式,而不会去干涉b方法中的代码是否遵循严格模式。如果b方法中涉及arguments.callee.caller代码,寻找上级的调用方法,并且刚好寻找到a方法所在的调用,则在IE10及以上的浏览器中会抛出:“strict 模式下不允许访问函数或参数对象的"caller"属性”的异常,而chrome浏览器会提示caller为空,并不抛出异常。如果在全局模式下使用如arguments.callee.caller这类代码,无论出现在任何调用位置,IE chrome都会抛出异常***

原文地址:https://www.cnblogs.com/zzq-include/p/5546525.html