01 ES6 use strict严格模式

严格模式:'use strict’

1.在<script>里面的第一行写'use strict';,表明下面代码都是使用严格模式
2.使代码的定义、使用更加规范,避免一些诡异的运行行为
3.在后续的ES特性和一些Angular等JS框架中,要求必须要在严格模式下运行
4.使代码的编译和运行更加高效(避免代码产生一些不必要的麻烦)

对变量的影响

1、变量必须要先声明再使用

i = 10; // 严格模式:抛ReferenceError异常
console.log(i); // 非严格模式:正常声明,正常打印

2、不可以使用implements,interface,let,package,private等保留字/关键字作为变量名

var private = 100; // 严格模式:抛SyntaxError异常 非严格模式:正常声明

3、严格模式不再允许用户删除变量

var i = 10;
console.log(delete i);	// 严格模式:抛SyntaxError异常  非严格模式:false
console.log(i);			// 非严格模式:10

对对象的影响

1、为只读属性赋值会抛出TypeError
2、对不可配置的属性使用delete 操作符会抛出TypeError
3、对不可扩展的对象添加属性会抛出TypeError
4、不可以使用with简化对象访问(为什么?)

var obj = {id: 1, name: "Tom"};
with(obj) {
	// 这里addr属性有歧义
	addr = "nanjing"; // 严格模式:抛SyntaxError异常,所以后面的不走了
	name = "Sophia";
	document.write(id);	// 非严格模式:1
	document.write(name); // 非严格模式:Sophia
	document.write(addr); // 非严格模式:nanjing
}
document.write(obj.name); // 非严格模式:Sophia
console.log(obj.addr); // 非严格模式:undefined

对函数的影响

1、在普通函数中,不允许使用this引用当前windows对象

function test() {
	console.log(this);	// 严格模式:undefined 非严格模式:输出window对象
}
test();

2、在严格模式中,函数的参数必须唯一

// 非严格模式:没有错误,只能访问第二个参数,如果要访问第一个参数,就必须通过arguments
function sum(num,num){ // 严格模式:抛SyntaxError异常
	console.log(num); // 非严格模式:2
	console.log(arguments[0]); // 非严格模式:1
}
sum(1,2);

3、在严格模式下arguments对象的行为也有所不同.在严格模式下,修改命名参数的值也会反映到argument对象中,但是在严格模式下这两个值是完全独立的

function showValue(value){
	value = 'foo';
	console.log(value); // 严格模式:foo 非严格模式:foo
	console.log(arguments[0]); // 严格模式:hello  非严格模式:foo
}
showValue('hello')

4、eval函数最大的变化就是他在包含上下文中不在创建变量或者函数

var str = "var j = 100";
eval(str);
console.log(j);	 // 非严格模式:100 严格模式:j is not defined

5、只要在<script>中声明了严格模式,那么所有在此<script>中声明的函数也适用严格模式!如果<script>中不声明严格模式,函数的方法体中也可以自己声明,只对改方法里面起作用。

function test() {
	"use strict";
	  i = 10; // 属于严格模式范围 i is not defined
}
a = 20; 
console.log(a); // 属于非严格模式范围 20
test();

获取视频:阅读原文

个人公众号:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值