“use strict”
(1)不在兼容es3的一些不规则语法,使用全新的es5规范
(2)两种用法:
(2.1)全局模式
(2.2)局部函数内严格模式(推荐)
(3)就是一行字符串,不会对不兼容严格模式的浏览器产生影响
(4)(4.1)不支持with,arguments.callee,function.caller,(4.2)变量赋值前必须声明,(4.3)局部this必须被赋值(Person.call(null,undefined)赋值什么就是什么),(4.4)拒绝重复属性和参数。
es3.0和es5.0的区别:
一个版本的升级和革新必然会摒弃一些旧的语法没产生一些新的语法,一样的方法可能会在es3.0和es5.0中产生不一样的效果。
现在的浏览器都是基于es3.0的和es5.0的新增的方法使用的。
那es5.0和es3.0产生冲突的那一部分怎么解决呢?
用的是es3.0的!!!
es5.0的严格模式:es3.0和es5.0产生冲突的部分
es5.0的严格模式的启用:规定要把"use strict"写在页面的逻辑的最顶端(前面可以有空格回车,但是不能有代码)。
为什么es5.0严格模式的启动要是有字符串方式呢,为什么不用函数呢?
这个es3包括es5的严格模式必须是浏览器实现了es5的标准的前提下才能好使。如果这个浏览器比较老,IE1.0,他不可能有es5.0,es3都没有,那如果在那样的情况下,识别你的页面的话,你的页面里写了一句strict();函数运行,他没有这个函数,肯定报错,你在写到最顶端的话,你下面的什么东西也别想执行了。
一旦你使用es5.0严格模式,那么,es3.0和es5.0产生冲突的部分就使用es5.0,否则使用es3.0.
举个栗子:
es5.0不允许使用arguments.callee,这是个es3冲突的。
"use strict"
function test(){
console.log(arguments.callee);
}
test();
写在页面的最顶端,他启用的就是全局的es5.0严格模式,如果你把它写在局部的函数里面(也得写在最顶端的第一行,仅有这一个函数遵循es5.0严格模式):
function demo(){
console.log(arguments.callee);
}
demo();
function test(){
"use strict"
console.log(arguments.callee);
}
test();
这两个区域分别遵循了不同模式的规则。