稀土 2018-01-23
ECMAScript 5.1 (或仅 ES5) 是ECMAScript(基于JavaScript的规范)标准的修正。 与HTML5规范进程本质类似,ES5通过对现有JavaScript方法添加语句和原生ECMAScript对象做合并实现标准化。
相对于正常模式而言:
1:消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为。
2:消除代码运行的一些不安全之处,保证代码运行的安全。
3:提高编译器效率,增加运行速度。
4:为未来新版本的Javascript做好铺垫。
"严格模式"体现了Javascript更合理、更安全、更严谨的发展方向,包括IE 10在内的主流浏览器,都已经支持它,许多大项目已经开始全面拥抱它。
进入“严格模式”的标志,书写这行语句:"use strict";
老版本的浏览器会把它当作一行普通字符串,加以忽略。
"严格模式"有两种调用方法,适用于不同的场合。
针对整个脚本文件:将"use strict"放在脚本文件的第一行,则整个脚本都将以"严格模式"运行。如果这行语句不在第一行,则无效,整个脚本以"正常模式"运行。如果不同模式的代码文件合并成一个文件,这一点需要特别注意。
针对单个函数:将"use strict"放在函数的第一行,则整个函数以"严格模式"运行。
脚本文件的变通写法:因为第一种调用方法不利于文件合并,所以更好的做法是,借用第二种方法,将整个脚本文件放在一个立即执行的匿名函数之中。
eg:
// a.js (组员a的js代码引入严格模式) /* 'use strict'; var a = 4; var b = 3; console.log(a + b);*/ // b.js(组员b的js代码引入正常模式) /* var c = 6; var d = 7; console.log(c + d);*/ //项目上线代码合并(如果直接合并代码,组员b的代未按照严格模式规范来coding,语法可能发生各种问题)。 //解决方案:将代码分别封装进入两个匿名自执行函数 (function () { 'use strict'; var a = 4; var b = 3; console.log(a + b); })(); (function () { var c = 6; var d = 7; console.log(c + d); })();
严格模式对Javascript的语法和行为,都做了一些改变。
1:全局变量显式声明。
在正常模式中,如果一个变量没有声明就赋值,默认是全局变量。严格模式禁止这种用法,全局变量必须显式声明。因此,严格模式下,变量都必须先用var命令声明,然后再使用。
javascrip中的变量讲解中函数内部不加关键字var定义的全局变量如果引入严格模式,运行程序将会检查出语法错误。采用显示声明全局变量。
2:函数形参不允许重复。
3:禁止使用with语句。
4:禁止函数内部this关键字指向全局对象,this指向undefined。
5:函数必须声明在顶层。
将来Javascript的新版本会引入“块级作用域"。为了与新版本接轨,严格模式只允许在全局作用域或函数作用域的顶层声明函数。也就是说,不允许在非函数的代码块内声明函数。
// if(1){function a(){}} else {function a() {}}