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

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

posted @ 2018-10-08 11:09  菜鸟木易  阅读(734)  评论(0编辑  收藏  举报