zoukankan      html  css  js  c++  java
  • 【转】再来说说eval

    当使用eval方法时,你可以直接调用eval(expression),也可以调用window.eval(expression)或者window["eval"](expression)。这三种不同的调用方法在不同浏览器环境中是有差别的。具体请看下面的示例:

    首先准备三个测试函数a、b、c:

    function a() {
      var inner = 1;
      try {
        eval('inner += 1');  
      }
      catch (e) {
        alert(e.message);
      }
      alert(inner);
    }

    function b() {
      var inner = 1;
      try {
        window.eval('inner += 1');  
      }
      catch (e) {
        alert(e.message);
      }
      alert(inner);
    }

    function c() {
      var inner = 1;
      try {
        window['eval']('inner += 1');  
      }
      catch (e) {
        alert(e.message);
      }
      alert(inner);
    }

    函数都非常简单,定义一个函数私有变量inner,eval的代码将这个inner加1。为了捕捉问题使用了try/catch将eval代码包含进去。以下是测试结果(inner的最终值):

    IE6:2    2    2

    IE7:2    2    1

    IE8:2    2    1

    IE9:2    1    1

    FF3:2    2    2

    FF4:2    1    1

    Chrome:2    1    1

    Safari:2    1    1

    Opera:2    1    1

    inner为2的时候eval的代码执行成功,inner为1的时候所有浏览器都会提示inner是未定义的。可以看出,IE6和FF3的行为一致,IE7和IE8的行为一致,其余的浏览器行为一致。为什么会出现不一致,规范中是否有相应的约束呢?后面的文章再来说吧。

  • 相关阅读:
    Windows 黑屏问题
    Java原生API操作XML
    Java使用Schema模式对XML验证
    使用Spring构建RMI服务器和客户端
    Eclipse多个console的使用
    jsr133-第一二章
    装个centos虚拟机之设置桥接网络
    Hadoop学习
    关于配置中心选型
    maven的SNAPSHOT版本和正式版本不同
  • 原文地址:https://www.cnblogs.com/danghuijian/p/4400172.html
Copyright © 2011-2022 走看看