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都会抛出异常***