• 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);

    -----------------------------一花开五叶 结果自然成-------------------------------------------------
  • 相关阅读:
    linux
    算法
    算法
    数据结构 与 算法
    mysql
    mysql
    mysql
    mysql
    【解决】Could not get JDBC Connection、java.lang.InterruptedException问题和排查过程
    git: unable to checkout working tree error: unable to create file Filename too long on windows
  • 原文地址:https://www.cnblogs.com/zyc-undefined/p/3398628.html
Copyright © 2020-2023  润新知