js eval setTimeout 第一个参数是字符串的情况,及在严格模式下的表现

在非严格模式下 eval 中的代码,就像是插入在代码中的一样。

function foot(){
	var b =11;
	eval("b=function(){};console.log(b)");
	console.log(b);
}
//非严格模式下等同于(有一点不同的是eval 内部的定义的变量是无法被提升的)

function foot(){
	var b = 11;
	b = function(){};
	console.log(b);
	console.log(b);
}

//当eval内是一个未知的变量字串时,作用域内的变量可能被破坏。


严格模式下等同于
function foot(){
	var b = 11;

	//自执行函数
	(function(){
		b = function(){};
	console.log(b);
    })()
	console.log(b);
}

 setTimeout 第一个参数是字符串时,内部会使用 eval执行。 这里好像无法使用严格模式,严格模式下ggg应该是12 但是实际上却是 xxxx,严格模式好像未生效

var ggg = 12;
setTimeout("var ggg= 'xxxx';console.log(ggg)",0);
setTimeout(function(){
 

	console.log(ggg); //xxxx 
},0)  

 new Function("var b =11;")  Function 内的字符串自成 function 作用域。

严格模式下 :arguments 和形参的改变不会再相互影响。

严格模式 详见:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Strict_mode

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

转载于:https://www.cnblogs.com/chillaxyw/p/9753227.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值