js es5严格模式_练习

在逻辑的顶端声明"use strict",启动es5.0模式
  • 不支持 with,arguments.callee,function.caller,变量赋值前必须声明,局部 this 必须被赋值(Person.call(null/undefined) 赋值什么就是什么),拒绝重复属性和参数
使用方法:
  1. 全局严格模式
  2. 局部函数内严格模式 (例如jquery)
// "use strict";	// 执行a函数时直接报错。
function a() {
	console.log(arguments.callee);
}
function b() {
	"use strict";
	a();							// 3.0正常
	console.log(arguments.callee);	// 5.0报错
}
function c() {
	console.log(arguments.callee);
}

a();	// 3.0正常
try{
	b();
} catch (e) {
	console.log(e);
	// TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them
};
a();	// 3.0正常
c();	// 3.0正常
  • 非构造函数在预编译时,this不指向window(3.0)而是undefined(5.0),
  • 非构造函数.call()时传原始值,this指向包装类(3.0)改为直接接受原始值(5.0)
"use strict";		// 3.0 & 5.0
console.log(this);	// 都是 window
function aaa() {
	console.log(this);
}
aaa();			// window & undefined
aaa.call({});	// 都是 {}
aaa.call(123);	// Number {123} & 123
function Bbb() {
	console.log(this);
}
new Bbb();		// 都是 Bbb {}
  • 拒绝重复参数(报错,只声明不执行也不可以),
  • 拒绝重复属性(不报错,效果相同)。
"use strict";		// 3.0 & 5.0
function a(b, b) {
	console.log(b);		// 2 & SyntaxError
}
a(1, 2);
var c = {
	d : 4,
	d : 5
}
console.log(c);		// 都是 {d: 5}
  • with的基本用法
debugger;
var arr = {
	b : 2.1
}
var b = 2;
function a() {
	var b = 2.2;
	with(arr) {
		console.log(b);			// 2.1	// 比AO权限高
		console.log(window.b);	// 2
	}
}
a();
  • with解决命名空间
var name = "name0";
var org = {
	dp1 : {
		pers1 : {
			name : "name1",
			say : function () {
				console.log(this.name);
			}
		},
		pers2 : {
			name : "name2",
			say : function () {
				console.log(this.name);
			}
		}
	},
	dp2 : {
		pers3 : {
			name : "name3",
			say : function () {
				console.log(this.name);
			}
		},
		pers4 : {
			name : "name4",
			say : function () {
				console.log(this.name);
			}
		}
	}
}
org.dp1.pers2.say();	// name2
with(org.dp1.pers2) {
	console.log(name);	// name2
	say();				// name2
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值