zoukankan      html  css  js  c++  java
  • eval & window.eval & window.execScript 的区别

    eval & window.eval & window.execScript 的区别

    首先看一下 eval 和 window.eval 的区别

    直接看示例代码:

    var x = 2;
    
    var test = function(){
       var x = 5;
       eval('alert(x)');
    };
    
    var test_win = function(){
       var x = 6;
       window.eval('alert(x)');
    };
    
    alert(x);           // IE6/7/8/9/Chrome/Ff: 2
    
    test();             // IE6/7/8: 5, IE9/Chrome/Ff: 2
    
    test_win();         // IE6/7/8: 6, IE9/Chrome/Ff: 2

    这里首先定义了一个全局变量x,然后分别在 test 和 test_win 的局部闭包内定义了变量x。可以看到 eval 引用的局部变量的x,而 window.eval 引用的是全局变量x(在IE9,Chrome,FF下)。

    各位看官看到这里应该已经发现了,在IE6/7/8下还有兼容性的问题,就是说eval和window.eval在IE6/7/8下的作用是一样的。

    那如何才能兼容IE6/7/8呢?这个时候 window.execScript就派上用场了,而且这个玩意也只有IE才支持。

    将上面的 window.eval 换成 window.execScript,IE下面测试结果也是返回 2,bingo!

    总结:

    eval 作用于局部作用域,window.eval 和 window.execScript 作用于全局作用域,也可以等价的这么看

    eval === eval.call(this, str);

    window.eval === eval.call(window, str);

    -----------------------------一花开五叶 结果自然成-------------------------------------------------
  • 相关阅读:
    XML 文档(1, 2)中有错误:不应有 <xml xmlns=''>
    工厂模式、控制反转及依赖注入
    [译]新的CCSDS图像压缩推荐标准
    关于C#的静态类和静态构造函数
    c++友元函数与友元类
    malloc/free 与 new/delete 比较
    C++ main函数命令行参数使用
    进程和线程的区别
    堆和栈的区别
    java与C++的区别
  • 原文地址:https://www.cnblogs.com/zyc-undefined/p/3398628.html
Copyright © 2011-2022 走看看