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 }

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM