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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值