严格模式

来源:互联网 发布:php网站打包app 编辑:程序博客网 时间:2024/06/10 23:40

一、严格模式的主要目的

1、消除javascript语法的不合理,不严谨之处,减少怪异行为;

2、消除代码运行的不安全之处,保证代码运行的安全;

3、提高编译器效率,增加运行速度;

4、位未来版本的javascript做好铺垫。


二、进入标志

“use strict”;


三、调用方式

1、针对整个脚本文件:将“use strict”放在脚本文件的第一行,则整个脚本都将以严格模式运行,若这行语句不在第一行,则无效(缺点,不利于js文件的合并)

2、针对单个函数:将“use strict”放在函数体的第一行,则整个函数以严格模式运行。

3、脚本文件的变通写法:借用第二种方法,将整个脚本文件放在一个立即执行的匿名函数中。

(function(){“use strict”//some code here})();


四、语法和行为的改变

1、全局变量的声明

正常模式中,一个变量没有声明就赋值,默认是全局变量。严格模式的全局变量必须显示声明。

2、静态捆绑

动态捆绑:属性和方法到底属于哪一个对象,不是在编译时确定的,而是在运行时确定的。严格模式对动态捆绑做了一些限制,只允许静态捆绑,在编译时确定属性和方法输入哪个对象。这样有理由编译效率的提高,使代码容易阅读,少出意外。

1)禁用with语句

2)正常模式下,Javascript语言有两种变量作用域(scope):全局作用域和函数作用域。严格模式创设了第三种作用域:eval作用域。

正常模式下,eval语句的作用域,取决于它处于全局作用域,还是处于函数作用域。严格模式下,eval语句本身就是一个作用域,不再能够生成全局变量了,它所生成的变量只能用于eval内部。

 "use strict";  var x = 2;  console.info(eval("var x = 5; x")); // 5  console.info(x); // 2
3增强的安全措施
禁止this关键字指向全局对象、禁止在函数内部遍历调用栈、严格模式下无法删除变量。只有configurable设置为true的对象属性,才能被删除。

0 0
原创粉丝点击