execScript与eval区别
相同点:
(1)execScript与eval都可以接收一个字符串,若该字符串是表达式(expression),则执行时将求得该表达式的值并返回;若该字符串是一个或多个语句(statements),则执行时将运行这些语句。
不同点:
(1)execScript是IE浏览器独有;eval则是所有浏览器都支持。
(2)execScript无论是在什么作用域(global/local)内被调用,它所接受到的表达式(expression)或语句(statements)字符串都将在全局作用域内执行(global);eval则是在它被调用时所在的作用域内运行它所接受到的表达式(expression)或语句(statements)字符串。
先看看eval例子
1 eval('var global = "global";');//全局作用域内调用eval,则var global = "global";是在全局作用域内被运行的,最终是得到一个global全局变量 2 (function(){ 3 //这个匿名函数块内生成了一个局部作用域 4 eval('var local = "local";');//局部作用域内调用eval,则var local = "local";是在局部作用域内被运行的,最终是得到一个local局部变量 5 console.log(local);//输出local 6 console.log(global);//输出global,因为它是全局变量 7 })(); 8 console.log(global);//输出global 9 console.log(local);//报错,提示local为声明,因为local是局部变量,外部无法访问
再看看execScript例子
1 //注意,以下代码必须在IE浏览器下运行 2 execScript('var global = "global";');//这里声明并初始化了一个global全局变量 3 (function(){ 4 //这个匿名函数块内生成了一个局部作用域 5 execScript('var local = "local";');//这里其实还是声明并初始化了一个local的全局变量,不要误认为local是一个局部变量哦。 6 alert(local);//输出local 7 alert(global);//输出global 8 })(); 9 alert(local);//输出local 10 alert(global);//输出global
那么如何在不支持execScript函数的浏览器下实现在全局作用内执行字符串呢?这里列出jQuery的实现,其实还是蛮简单的,具体如下:
1 function globalEval( data ) { 2 if ( data ) { 3 // We use execScript on Internet Explorer 4 // We use an anonymous function so that context is window 5 // rather than jQuery in Firefox 6 ( window.execScript || function( data ) { 7 window[ "eval" ].call( window, data ); 8 } )( data ); 9 } 10 }
posted on 2013-10-10 23:09 shiny_bender 阅读(7694) 评论(0) 编辑 收藏 举报