eval()、window.eval()和with

本文探讨了JavaScript中的eval()和window.eval()函数,它们都能动态执行代码,但执行上下文有所区别。同时,提到了with关键字如何改变代码的执行上下文,特别是在处理数据过滤场景中的应用。通过两个示例,解释了with作用域链的创建和恢复过程,进一步理解它们在JavaScript编程中的影响。
摘要由CSDN通过智能技术生成

eval()和window.eval()都可以用来动态执行javascript代码,能给js编程带来很大的灵活性,两者唯一的差别在于执行上下文不同。

function testEval() {
	eval("var strEval = 'local';");
}

function testWindowEval() {
	window.eval("var strWindowEval = 'global';");
}

testEval();
testWindowEval();
alert(strWindowEval); //global
alert(strEval); //Uncaught ReferenceError: strEval is not defined

可以看到:window.eval()的执行上下文是“全局对象”,而eval()的执行上下文则是“调用eval的上下文环境”。现在我们看下,与eval有关的代码。

代码1:

var str = "global";

function test() {
	alert(str); //undefined
	var str = "local";
}

test();
alert(str); //global
如果你了解var关键字的"提前声明"特性,上面这段代码的执行结果很好理解。如果不明白,可以参考
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值