JavaScript严格模式有什么不同
看ES6,瞄到“严格模式”,问了下自己什么是“严格模式”?答案好像不是很明朗,遂总结如下:
严格模式声明:“use strict”;
1、禁止变量未声明就赋值
2、限制动态绑定(属性和方法归属哪个对象在编译阶段就要确定)
1)禁止使用with
2)创建eval作用域,eval内声明的变量外部访问不到
3、增强的安全措施
1)禁止this关键字指向全局对象
2)禁止在函数内部遍历调用栈(函数内访问functionName.caller/functionName.arguments均报错)
4、禁止删除变量(只有configurable设置为true的对象属性才能被删除)
5、对只读属性赋值将会报错
6、重名错误
1)函数参数不能重名
7、禁止以零(0)开头的8进制表示法,支持数字0加字母o:“0o”为前缀表示八进制数
8、arguments的限制
1)arguments本身不能被赋值 ,但是arguments[x]仍然可以
2)arguments不再追踪参数的变化,在函数内改变参数值,arguments依然指向旧值
3)禁止使用arguments.callee,匿名函数无法调用自己了
9、函数必须在顶层声明
10、不允许使用以下保留字做变量名
1)implements
2)interface
3)let
4)package
5)private
6)protected
7)public
8)static
9)yield
详细参考:
http://www.ruanyifeng.com/blog/2013/01/javascript_strict_mode.html
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Strict_mode