es5的严格模式

es5的严格模式

ES5是ECMAScript的第五个升级版本

在原有的js中增加了

1.严格模式:使用严格模式在当前代码段的顶部添加字符串:“use strict”
use strict翻译使用严格的
严格模式的4个新要求:

1.禁止给未声明的变量赋值 在非严格模式下没有声明的变量是会自动在全局创建该变量的,在严格模式下是禁止的,严格模式必须声明变量才能使用该变量

<script>
    //在顶部声明严格模式
	"use strict"
	//在非严格模式下,是可行的,会自动在全局创建的,但是在严格模式下是会报错的
	a = 1;
console.log(a)//Uncaught ReferenceError:a is not defined
</script>

2.静默失败:在非严格模式中,执行不成功,但是不会报错.ES5对这一情况进行了改善.在严格模式下,已经将所有的静默失败都升级了错误,在这个情况下便于调试,避免歧义

3.普通函数调用和匿名函数自调中的this默认指undefined,而不再指window

<script>
    //在非严格模式下
	function Student(sname,sage){
    	this.sname = sname
    	this.sage  = sage
	} 
	//正确的使用构造函数
	var zz = new Student('zhuzhu',11)
    console.log(zz)//{sname :zhuzhu,sage:11}
	//错误的使用构造函数  Student函数变成了普通函数 普通函数中的this指向window
	var hbb = Student('hanbinbin',9)
    console.log(hbb)//undefined
	console.log(window.sname)//hanbinbin
</script>


<script>
    //在严格模式下
	function Student(sname,sage){
    	this.sname = sname
    	this.sage  = sage
	} 
	//正确的使用构造函数
	var zz = new Student('zhuzhu',11)
    console.log(zz)//{sname :zhuzhu,sage:11}
	//错误的使用构造函数  Student函数变成了普通函数 普通函数中的this指向undefined
	var hbb = Student('hanbinbin',9)
    //报错:Uncaught TypeError: Cannot set property 'sname' of undefined
    //不能 修改的 属性 sname 在 undefined中
    console.log(hbb)
	console.log(window.sname)
</script>

4.禁止使用arguments.callee

arguments.callee 可以自动获取当前函数对象本身,直接用当前函数对象进行递归调用,与函数名无关了

严格模式下禁用: 因为递归调用效率太低了,重复计算量太大

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值