effective javascript(八)——eval函数

javascript中的eval函数功能十分强大,错误使用eval函数的方法之一就是允许它干扰作用域。下面来看个例子:

function demo(a) {
    eval("var b = a");
    return b;
}
demo("hello")// hello

放在eval函数中声明的变量b和直接放在demo函数体中略有不同。只有当eval函数被调用时,eval函数中的var声明语句才会被调用。下面再看一个例子:

var b = "global";
function demo(a) {
    if(a){
        eval("var b = 'local';");
    }
    return b;
}
demo(true)// local
demo(false)// global

eval函数有能改变局部作用域内变量的能力,错误的使用eval函数可能造成一些难以预测的问题。

function demo(b) {
    var a = 'local';
    eval(b);
    return a;
}
demo('var a = "eval_local"')// eval_local
demo('var c = "eval_local"')// local

为了避免eval函数改变局部变量,解决办法之一是将eval函数放在一个闭包中。

function demo(b) {
    var a = 'local';
    (function () {
        eval(b);
    })();
    return a;
}
demo('var a = "eval_local"')// local
demo('var c = "eval_local"')// local

end…

最新回复(0)
/jishuoMmPngjlIH_2BauMSOG4OPgIg9fm12wKcTp6ARDHjI3es_3D8