zoukankan      html  css  js  c++  java
  • 浅谈 js eval作用域

    就简单聊下如何全局 eval 一个代码。

    var x = 1;
    (function () {
        eval('var x = 123;');
    })();
    console.log(x);

    这个代码得到的是 1 而不是 123
    如果想让 eval 执行的代码是全局的,那么有几种方法。

    var x = 1;
    (function () {
        window.eval('var x = 123;');
    })();
    console.log(x);

    这个方法标准浏览器都可以得到 123 而IE6-8则依然是 1

    相同的例如

    var arr = [0,0,0,0,0,0];
    (function () {
        var arr = [1,1,1,1,1,1];
        var _eval = eval;
        window.eval('arr[0] = 123;');
        eval.call(null, 'arr[1] = 123;');
        _eval('arr[2] = 123;');
        (0,eval)('arr[3] = 123;');
    })();
    console.log(arr);

    0,1 貌似不支持IE8- 2,3 貌似不支持 IE7-
    反正归根结底就是兼容性有问题。
    不过好在IE下有个 execScript 非常好使。

    var x = 1;
    (function () {
        (!-[1,] ? execScript : eval)('var x = 123;');
    })();
    console.log(x);

    这样基本上就全兼容了。

    好了,今天就分享这么个小知识点了。

  • 相关阅读:
    视频解析小技巧
    linux系统路由设置
    tracert路由跟踪命令
    php+nginx
    docker快速拉取镜像
    linux命令
    添加docker命令
    linux模糊查询文件名
    查看日志
    模板函数与模板类
  • 原文地址:https://www.cnblogs.com/52cik/p/js-eval.html
Copyright © 2011-2022 走看看