22、JavaScript学习笔记——ES5严格模式

ES5严格模式

当前使用的ES语法是基于ES3.0的方法加上ES5.0的新增方法。

默认情况下,ES3.0和ES5.0冲突的部分,会沿用ES3.0的方法;而在ES5.0严格模式下,冲突部分会使用ES5.0的方法。

1. “use strict”

不再兼容ES3.0的一些不规则语法。使用全新的ES5.0规范。

1.1 ES5.0严格模式的启动

要选择使用严格模式,需要使用严格模式编译指示(pragma),即一个不赋值给任何变量的字符串"use strict";

这个字符串不会对不兼容严格模式的浏览器产生影响。

这样一个即使在 ECMAScript 3 中也有效的字符串,可以兼容不支持严格模式的 JavaScript 引擎。支持严格模式的引擎会启用严格模式,而不支持的引擎则会将这个编译指示当成一个未赋值的字符串字面量。

这个字符串必须写在逻辑的最顶端。全局严格模式将"use strict";写在整个页面代码逻辑的最顶端,局部函数内的严格模式,将其写在函数逻辑的最顶端。

1.2 两种用法

  • 全局严格模式;
  • 局部函数内严格模式。

推荐使用函数内局部严格模式。

2. 冲突部分

  • 不支持with,arguments.callee,func.caller;

with可以改变变量的执行上下文,配合命名空间使用可以方便变量的使用。with(){}小括号中指定了大括号内容的执行期上下文。

  • 变量赋值前必须声明;(非严格模式下,var声明的变量在声明前使用称为暗示全局变量)

例如,var a = b = 3;是会报错的,b是未经声明的。

其他变量规则:
1.无法在变量上调用delete
2.限制变量名

  • 局部this必须被赋值,始终以指定值作为函数this的值;

  • 拒绝重复属性和参数;

function test (name, name) {
    console.log(name);
}
test(1, 2);   //2

上述函数中出现重复参数,在非严格模式下是不会报错的。但是在严格模式下,会抛出SyntaxError。

var obj = {
    name : "123",
    name : "234" 
}

上述对象出现重复属性名,在严格模式下也是不允许的。

  • 函数的形参值和arguments实参列表是独立的,不会再同步变化;

  • eval()不会在包含上下文中创建变量或函数。

变量和函数可以在eval中声明,但是他们处于代码执行期间的特殊作用域中,代码执行完就会销毁。

eval是ES解释器,eval()接收一个字符串作为参数,并将该字符串解释为实际的ES语句,然后插入该位置。例如eval("console.log("ac")");相当于console.log("ac");执行。

你可能感兴趣的:(javascript,学习,前端)