javascript的严格模式与有什么特点?

JavaScript的严格模式增加了对语法和语义的限制,如需全局变量必须声明,禁止使用with语句,eval创建自身作用域,防止this指向全局对象,并强化错误处理。这些改变提升了代码质量和可维护性。
摘要由CSDN通过智能技术生成

开启严格模式

//全局开启了严格模式
"use strict";
function fn(){
	//当前fn函数开启了严格模式
  "use strict";
  return "123";
} 

严格模式中的变化

1. 全局变量显示声明

'use strict'
num = 10 
console.log(num)// 报错,num未声明

报错,num未声明

2、禁止使用with语句

function f(x, o) {
  with(o) {
    console.log(x)
  }
}
f(null, {x:3}) // 3
// with 语句 
// 弊端:代码不易阅读,易混淆,程序在查找变量值时,先从指定的对象里找,那些不是指定对象的变量查找起来会很慢。
// 优点:减少不必要的指针路径解析运算

使用了with之后,在with里面x就专指o里面的x

弊端:代码不易阅读,易混淆,程序在查找变量值时,先从指定的对象里找,那些不是指定对象的变量查找起来会很慢。
优点:减少不必要的指针路径解析运算。

3、创设eval作用域

严格模式创设额外的作用域,正常模式下,eval作用域取决于它处于全局作用域还是函数作用域。严格模式下,eval语句本身就是一个作用域,不再生成全局变量,生成的变量只能用于eval内部。

'use strict'
var x = 2
console.info(eval('var x = 5; x')) // 5,  将计算js字符串,将其作为脚本代码来执行
console.log(x)  //  2

4、禁止this指向全局对象(定时器的this还是指向window)

严格模式下,不指向window就指向undefined

function Star() {
     this.sex = '男';
}
Star();  // 4. 严格模式下,如果构造函数不加new调用, this 指向undefined, 赋值则会报错.
var ldh = new Star();
console.log(ldh.sex);

5、显式报错

1、正常模式下,对一个对象的只读属性进行赋值,不会报错,只会默默地失败;严格模式下会报错。
2、严格模式下,对一个使用getter方法读取的属性进行赋值,会报错
3、对禁止扩展的对象添加新属性
4、删除不可删除的属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值