當(dāng)前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
【JavaScript】关于eval( )
生活随笔
收集整理的這篇文章主要介紹了
【JavaScript】关于eval( )
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
為什么80%的碼農(nóng)都做不了架構(gòu)師?>>> ??
一、eval()?動態(tài)執(zhí)行時使用當(dāng)前函數(shù)的閉包。 var i = 100; function myFunc(ctx) {var i = 'test';eval('var test = "hello."'); //test執(zhí)行后為局部變量 } myFunc(); // 輸出值100 alert(i); 二、eva l()?訪問全局閉包:1、IE內(nèi)核環(huán)境下: ? ? ? 在 Internet Explorer 中的 JScript 的 eva l() 下,無 論是使用 window.eva l 調(diào)用,還是使用 window 作為傳入的 this 實例,都不可能讓 eva l()? 得到訪問全局閉包的能力。不過 JScript 中可以使用另一種方法來 得到完全相同的效果,即在 window.execScript() 方法中執(zhí)行的代碼“總是”在 全局閉包中執(zhí)行。 // 本例建議在Internet Explorer 環(huán)境中測試 var i = 100; function myFunc() {window.execScript('i = "test"');//execScript('i = "test"'); } myFunc(); // 輸出值'test', 表明調(diào)用myFunc()時修改了全局閉包中的變量i alert(i); ? ? ? 而且, JScript ? 運行在名為 ActiveScript 的腳本環(huán)境中,該 execScript() 方法也提 供跨腳本語言的代碼能力。因此也可以在第二個參數(shù)中指定語言的種類。 execScript('i = "test"', 'JScript'); 或 execScript('dim i = "test"', 'VBScript'); 2、非 IE內(nèi)核環(huán)境下: // 本例建議在mozilla firefox 環(huán)境中測試 var i = 100; function myFunc() {window.eval('i = "test"');//eval.call(window, 'i = "test"'); } myFunc(); // 輸出值'test', 表明調(diào)用myFunc()時修改了全局閉包中的變量i alert(i); 三、解決eval作用域的方法: with ( objContext )eval (strScript) 。?? with ( window )eval (strScript) ; //eval在 全局作用域中執(zhí)行 四、使 用eval()來獲取“對象直接量”: // 用eval()來獲取“對象直接量”的正確方法, 返回對象 alert( eval('({ name: "MyName", value: 1 })' )); //注意外層的括號({?name: "MyName",value: 1 }) 五、使用eval() 獲取匿名函數(shù): var func = eval(' (function() { })'); // 輸出'undefined' alert(typeof func); var func; eval( 'function func() { }' ); // 輸出'function' alert(typeof func); 必須使用匿名函數(shù)的情況: //var func = eval(' (function() { }).prototype.constructor '); //var func = eval('( {$:function() { }}).$'); // 或 var func = eval(' [function() { }][0]'); // 輸出'function' alert(typeof func);
轉(zhuǎn)載于:https://my.oschina.net/aram/blog/114537
總結(jié)
以上是生活随笔為你收集整理的【JavaScript】关于eval( )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: libuv 中文编程指南(四)网络
- 下一篇: java url 授权,Spring M