effective javascript(八)——eval函数

来源:互联网 发布:网络端口怎么看 编辑:程序博客网 时间:2024/04/30 22:19

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)// localdemo(false)// global

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

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

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

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

end…

0 0
原创粉丝点击