在非严格模式下 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