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

    这样基本上就全兼容了。

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

  • 相关阅读:
    Servlet 规范 简介
    Redis简介
    some tips
    初识Servlet
    JVM基础知识
    使用typora编辑博客
    航海が始まる日
    比较好的IT教程网
    vue 使用心得---工作中一些关键点
    Vue父组件主动获取子组件的数据和方法
  • 原文地址:https://www.cnblogs.com/52cik/p/js-eval.html
Copyright © 2011-2022 走看看