JavaScript中的eval函数

相信知道js的肯定都知道js有一个功能强大的函数,就是eval(),它可以来执行一个表达式或者一段语句,下面就来具体看一下这个函数是如何使用的。


一. 参数

该函数的参数是一个字符串,字符串可以是表达式、语句、或者一个函数,如下:

(1)声明一个变量

eval('var x = 1;');
console.log(x);   //1

(2)执行一个表达式

var a = eval('1+2');
console.log(a);   //3

(3)执行一个函数

function test(){
    console.log("看我强大不!");
}
eval('test(); console.log("你真厉害!!")');
//看我强大不!
//你真厉害!!!

(3)声明一个对象

var person = eval('({name: "luwenjing", age: 22})');
console.log(person.name);  //luwenjing

注意在用eval()声明一个对象时,应该用括号括起来,它才会返回一个完整的对象,不然会出错。

(4)一系列语句会如何返回

var y = eval('var sum = 0;for (var i = 0; i < 10; i++){'+
    'sum++;'+
    '}');
console.log(y);   //9
var y = eval('var sum = 0;for (var i = 0; i < 10; i++){'+
    'sum++;'+
    '} 1+2');
console.log(y);  //3

可以看出,执行一批语句并返回结果时,这些语句都将被忽略,然后返回“最后执行到的,有返回值的那条语句”。

二. 作用域

关于函数,我想大家都关心它的作用域是怎样的,下面来看一下:

(1)在闭包中的作用域

var str = 'hello';
function func(){
    eval('var str = "luwenjing"');
    str = str + ", hello";
    console.log(str);
}
func();  //luwenjing, hello
console.log(str);  //hello

可以看出,它的执行环境就是它所处闭包的作用域,eval只是执行一条语句,它并不影响它里面参数的作用域。

(2)修改变量的作用域

var str = 'hello';
function func(){
    window.eval('var str = "luwenjing"');
    str = str + ", hello";
    console.log(str);
}
func();  //luwenjing, hello
console.log(str);  //luwenjing, hello

因为eval是window对象的一个函数,所以可以像修改全局对象那样去修改一个对象的作用域。但是在IE8及IE8一下版本的IE浏览器,这样是无效的,可以像下面这样修改:

var str = 'hello';
function func(){
    if (window.execScript){
        window.execScript('var str = "luwenjing"');
    }
    else{
        window.eval('var str = "luwenjing"');
    }
    str = str + ", hello";
    console.log(str);
}
func();
console.log(str);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值