execScript与eval区别

相同点:

(1)execScript与eval都可以接收一个字符串,若该字符串是表达式(expression),则执行时将求得该表达式的值并返回;若该字符串是一个或多个语句(statements),则执行时将运行这些语句。

不同点:

(1)execScript是IE浏览器独有;eval则是所有浏览器都支持。

(2)execScript无论是在什么作用域(global/local)内被调用,它所接受到的表达式(expression)或语句(statements)字符串都将在全局作用域内执行(global);eval则是在它被调用时所在的作用域内运行它所接受到的表达式(expression)或语句(statements)字符串。

先看看eval例子

eval('var global = "global";');//全局作用域内调用eval,则var global = "global";是在全局作用域内被运行的,最终是得到一个global全局变量
(function(){
  //这个匿名函数块内生成了一个局部作用域
  eval('var local = "local";');//局部作用域内调用eval,则var local = "local";是在局部作用域内被运行的,最终是得到一个local局部变量
  console.log(local);//输出local
  console.log(global);//输出global,因为它是全局变量
})();
console.log(global);//输出global
console.log(local);//报错,提示local为声明,因为local是局部变量,外部无法访问

再看看execScript例子

//注意,以下代码必须在IE浏览器下运行
execScript('var global = "global";');//这里声明并初始化了一个global全局变量
(function(){
    //这个匿名函数块内生成了一个局部作用域
    execScript('var local = "local";');//这里其实还是声明并初始化了一个local的全局变量,不要误认为local是一个局部变量哦。
    alert(local);//输出local
    alert(global);//输出global
})();
alert(local);//输出local
alert(global);//输出global

那么如何在不支持execScript函数的浏览器下实现在全局作用内执行字符串呢?这里列出jQuery的实现,其实还是蛮简单的,具体如下:

function globalEval( data ) {
    if ( data ) {
      // We use execScript on Internet Explorer
      // We use an anonymous function so that context is window
      // rather than jQuery in Firefox
      ( window.execScript || function( data ) {
          window[ "eval" ].call( window, data );
      } )( data );
    }
}

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值