js严厉形式下的总结

所谓严厉形式实在就是一个不会赋值给任何变量的字符串 “use strict”
如果在全局作用域下 给出这个提醒,那全部剧本将采纳严厉形式。也能够只在函数中翻开严厉形式

1.严厉形式下没有全局变量

a=”test”

严厉形式下会报错,非严厉形式下一般

2.删除变量

var 有三种声明的状况

  • var 声明的全局变量
  • var 声明的局部变量
  • eval()中声明的全局变量

第一种和第二种状况是没法用 delete删掉的。
起首第一种状况声明的全局对象虽然是windows的属性,但这个属性的configurable=false 因此是没法删除的
第二种状况 局部变量更不行了,连倚赖的对象是谁都不知道,怎样删除

第三种状况eval()稍后会说到。

回归正题。也就是说非严厉形式下,能够删除变量,然则会失利返回false.
严厉形式下删除变量会报错。

3.对象

在以下状况下操纵对象会报错

  1. 为只读属性赋值会报错
  2. 对不可设置的属性运用delete 会报错
  3. 为不可扩大的对象增加属性会报错
  4. 在运用对象字面量的时刻,属性名必需唯一。比方
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属性,就会报错。

一会返来补充点别的

    原文作者:李静
    原文地址: https://segmentfault.com/a/1190000013376432
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞