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