严格模式又叫use strict,开启分成两种 : 1. 全局开启 ; 2. 局部开启 。
-
严格模式的目的:
(1)消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
(2)消除代码运行的一些不安全之处,保证代码运行的安全;
(3)提高编译器效率,增加运行速度;
(4)为未来新版本的Javascript做好铺垫。 -
严格模式的变更
(1) 开启严格模式
想开启严格模式,直接在作用域开始的位置写上 字符串 use strict
(2)严格模式的规则
关键字:var 、 with 、this 、参数、八进制、arguments
03.区别 :
1. var 使用的区别 ; 消除了伪全局变量!;
(function(){
“use strict”;
a = 10;
})();
(function(){
a = 10;
console.log(a);
})();
2. 对函数参数的要求更严格了;(function(){ function foo(a,a,b){ console.log(a,b); } foo(1,2,3) })(); (function(){ "use strict"; function foo(a,a,b){ console.log(a,b); } foo(1,2,3) })(); 3. 实参形参 和 arguments的分离; arguments 会受到 形参赋值的影响; (function(){ function foo(a,b){ a = 20; console.log(a,b); console.log(arguments[0],arguments[1]); } foo(1,2) })(); (function(){ "use strict"; // 形参 和 arguments 之间的区别; // 形参是变量可以随意赋值; // arguments 就是对应实参的关键字获取所有的实参,进行使用,不会被改变; function foo(a,b){ a = 20; console.log(a,b); console.log(arguments[0],arguments[1]); } foo(1,2) })(); 4. arguments 的严格使用; 部分功能禁用了; (function(){ function foo(){ // arguments.callee 指向了当前的函数; console.log(arguments.callee); } foo() })(); (function(){ "use strict"; function foo(){ // 禁用掉了大部分arguments的属性; console.log(arguments.callee) } foo() })();
-
严格模式之中对this的严格;
在以后的编程之中,this最没有用的指向就是window;
(function(){
function foo(){
this 指向window;
console.log(this);
}
foo()
})();
(function(){
“use strict”;
function foo(){
// 禁用指向了window的this,让this指向undefined
console.log(this);
}
foo()
})();
6. with(){}
使用with语句语法会混乱;
使用with会很大程度上降低代码的性能;
(function(){
with(Math){
// 可以省略对象前置;
console.log(random());
console.log(PI);
}
})();
严格模式之下禁用with(){}
(function(){
“use strict”;
with(Math){
console.log(random());
console.log(PI);
}
})();7. 在严格模式之中被禁用的进制,不允许使用八进制; (function(){ // 0 开头就是八进制的标志; console.log(012); })(); (function(){ "use strict" console.log(012) })();
04.总结 :
1. var : 不允许声明伪全局变量;
2. 参数: 不允许重复的参数;
3. arguments 和参数的关系; 进行了分离;
arguments 禁用了 callee 属性;
4. this指向了window, 会让this的指向抛空;
5. 禁用了with语句;
6. 严格模式之中不允许使用八进制;