欺骗词法作用域

欺骗词法作用域:在运行时修改词法作用域
1.eval:

function foo(str,a){
	eval(str);
	console.log(a,b)
}
var b = 2;
foo("var b = 3",1)  //1,3

执行foo()函数时eval()改变可foo的作用域,var b = 3 会对作用域修改,添加局部的b变量。
2.with:with的作用域随着他传入的参数不同而修改作用域

var obj = {
	a:1,
	b:2,
	c:3
}
with(obj){
	a=3;
	b=4;
	c=5;
}

function foo(obj){
	with(obj){
		a=2
	}
}
var o1 = {
	a: 3
};
var o2 = {
	b: 3
};
foo( o1 );
console.log( o1.a ); // 2
foo( o2 );
console.log( o2.a ); // undefined
console.log( a ); // 2——不好,a 被泄漏到全局作用域上了

总结:可以修改作用域,但是却无法进行优化。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值