码迷,mamicode.com
首页 > 编程语言 > 详细

JavaScript 严格模式

时间:2020-03-08 14:03:19      阅读:83      评论:0      收藏:0      [点我收藏+]

标签:mat   八进制   mic   margin   必须   random   callee   引用   类型   

严格模式即在严格的条件下运行,是ECMAScript5新增的一种运行模式。IE10之前的版本不支持该模式。

严格模式的目的

  1. 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
  2. 消除代码运行的一些不安全之处,保证代码运行的安全;
  3. 提高编译器效率,增加运行速度;
  4. 为未来新版本的Javascript做好铺垫。

开启严格模式

1、全局开启

  在所有语句之前声明 "use strict ";(或‘use strict’;)

2、局部开启

  给某个函数开启严格模式,需要在函数内部所有语句前声明" use strict ";

1         (function(){
2             "use strict";
3             // 严格模式
4         })();
5 
6         (function(){
7             //平常模式
8         })();

严格模式的规则

以下为几个常见的严格模式下的规则

1、变量声明必须有var关键字,不允许再意外创建伪全局变量。

1         // (function(){
2         //     a = 10;
3         //     console.log(a); // 10
4         // })(); 
5 
6         (function(){
7             "use strict";
8             a = 10; // 引用错误 ReferenceError: a is not defined
9         })();

2、函数的形参不允许重复

 1         // (function(){
 2         //     //不规范的写法
 3         //     function foo(a,a,b){ 
 4         //         console.log(a,b);//正常执行 2 3
 5         //     }
 6         //     foo(1,2,3);
 7         // })();
 8    
 9         (function(){
10             "use strict";
11             function foo(a,a,b){
12                 console.log(a,b);//SyntaxError: Duplicate parameter name not allowed in this context
13                                     // 语法错误:不允许同名参数存在于同一个作用域
14             }
15             foo(1,2,3)
16         })();

3、arguments和形参的关系进行了分离

 

 1         // arguments 会受到 形参赋值的影响
 2         // (function(){
 3         //     function foo(a,b){
 4         //         a = 20;
 5         //         console.log(a,b);// 20 2
 6         //         console.log(arguments[0],arguments[1]);//20 2
 7         //         // 在非严格模式下,函数的arguments和当前函数定义的形参存在映射关系,一个变另外一个也变
 8         //     }
 9         //     foo(1,2)
10         // })();
11         
12         (function(){
13             "use strict";
14             // 形参 和 arguments 之间的区别:
15             // 形参是变量可以随意赋值
16             // arguments 就是对应实参的关键字,获取所有的实参,进行使用,不会受形参影响
17             function foo(a,b){
18                 a = 20;
19                 console.log(a,b); // 20 2
20                 console.log(arguments[0],arguments[1]); // 1 2,不再受到形参的影响
21             }
22             foo(1,2)
23         })();

 

4、不允许使用arguments的callee、caller等属性

 

 1         // (function(){
 2         //     function foo(){
 3         //        // arguments.callee 指向当前的函数
 4         //        console.log(arguments.callee);//打印出foo(){}
 5         //     }
 6         //     foo()
 7         // })();
 8         
 9         (function(){
10             "use strict";
11             function foo(){
12                // 禁用了部分arguments的属性
13                console.log(arguments.callee)//类型错误 TypeError
14             }
15             foo()
16         })();

 

技术图片

5、this指向windows时,会让this的指向抛空

 

 1         // (function(){
 2         //     function foo(){
 3         //        console.log(this);// this 指向window
 4         //     }
 5         //     foo()
 6         // })();
 7         
 8         (function(){
 9             "use strict";
10             function foo(){
11                 // 禁用指向window的this,此时打印为undefined
12                console.log(this);
13             }
14             foo()
15         })();

 

6、禁用了with(){}语句

 

 1         // 使用with语句语法会混乱,会很大程度上降低代码的性能
 2         // (function(){    
 3         //     with(Math){
 4         //         console.log(random()); //相当于Math.random
 5         //         console.log(PI);  //相当于Math.PI
 6         //     }
 7         // })();
 8         
 9         (function(){
10             "use strict";
11             // 严格模式之下不允许包含with(){}语句
12             with(Math){
13                 console.log(random());
14                 console.log(PI);
15                 // 语法错误 SyntaxError: Strict mode code may not include a with statement 
16             }
17         })();

 

7、不允许使用八进制

 

1         // (function(){
2         //     console.log(012);//八进制012->十进制10
3         // })();
4 
5         (function(){
6             "use strict";
7             console.log(012);//语法错误 SyntaxError: Octal literals are not allowed in strict mode.
8         })();

 

我们应当谨慎地使用严格模式,让代码更工整更规范。

 

JavaScript 严格模式

标签:mat   八进制   mic   margin   必须   random   callee   引用   类型   

原文地址:https://www.cnblogs.com/uuind/p/12442085.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!