所谓严厉形式实在就是一个不会赋值给任何变量的字符串 “use strict”
如果在全局作用域下 给出这个提醒,那全部剧本将采纳严厉形式。也能够只在函数中翻开严厉形式
1.严厉形式下没有全局变量
a=”test”
严厉形式下会报错,非严厉形式下一般
2.删除变量
var 有三种声明的状况
- var 声明的全局变量
- var 声明的局部变量
- eval()中声明的全局变量
第一种和第二种状况是没法用 delete删掉的。
起首第一种状况声明的全局对象虽然是windows的属性,但这个属性的configurable=false 因此是没法删除的
第二种状况 局部变量更不行了,连倚赖的对象是谁都不知道,怎样删除
第三种状况eval()稍后会说到。
回归正题。也就是说非严厉形式下,能够删除变量,然则会失利返回false.
严厉形式下删除变量会报错。
3.对象
在以下状况下操纵对象会报错
- 为只读属性赋值会报错
- 对不可设置的属性运用delete 会报错
- 为不可扩大的对象增加属性会报错
- 在运用对象字面量的时刻,属性名必需唯一。比方
var person={
name:"1",
name:"2"
}
非严厉形式下会默许取值第二个,严厉形式下会报错。
4.函数
严厉形式请求函数参数称号必需唯一
function(n,n){
// todo
}
在非严厉形式下,这个函数声明不会报错,经由过程参数名只能接见到第二个参数,第一个参数得经由过程arguments去接见。
arguments在两种形式下也有所不同
在非严厉形式下,修正定名参数的值会反应到arguments对象中,在严厉形式下两个值是自力的。
镌汰了 arguments.callee(援用函数自身),arguments.caller(援用挪用函数)。
严厉形式下函数名不能运用js保留字
**严厉形式下只能在剧本的顶级和在函数内部声明函数,在if语句中声明函数会致使语法错误。
**
if(true){
function(){
// 严厉形式下报错
}
}
5.this
在非严厉形式下运用函数的apply(),call(),传入null 或许undefined值会被转换为全局对象。在严厉形式下,函数的this始终是指定的值,不管指定的是什么值。
var a="1";
function test(){
console.log(this.a)
}
test.call(null) 在非严厉形式下会输出1,严厉形式下this就指代的就是null,null没有a属性,就会报错。
一会返来补充点别的