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

    -----------------------------一花开五叶 结果自然成-------------------------------------------------
  • 相关阅读:
    Log4j的配置
    Linux笔记
    面对一个个路口
    切图布局知识点(四)——不定宽有背景文字块居中
    切图布局知识点(三)——左右布局
    切图布局知识点(二)——高度100%
    切图布局知识点(一)
    window下静默执行python脚本
    mysql 允许远程连接
    linux 防火墙
  • 原文地址:https://www.cnblogs.com/zyc-undefined/p/3398628.html
Copyright © 2011-2022 走看看