在 JavaScript 中指定 eval() 的范围?

2023-11-22

有什么方法可以在特定范围内执行 eval()(但不是全球性的)?

例如,以下代码不起作用(第二条语句中 a 未定义),因为它们位于不同的范围内:

eval(var a = 1); 
eval(alert(a));

如果可能的话,我想动态创建一个范围。例如(语法肯定是错误的,但只是为了说明这个想法)

var scope1;
var scope2;
with scope1{
    eval(var a = 1); eval(alert(a));  // this will alert 1
}
with scope2{
    eval(var a = 1); eval(a++); eval(alert(a));  // this will alert 2
}
with scope1{
    eval(a += 2); eval(alert(a)); // this will alert 3 because a is already defined in scope1
}

关于如何实现这样的目标有什么想法吗?谢谢!


你可以使用“严格使用”将经过评估的代码包含在评估本身中。

Second, eval严格模式代码不会将新变量引入周围范围。在普通代码中eval("var x;")引入一个变量x进入周围函数或全局范围。这意味着,一般来说,在包含调用的函数中eval每个不引用参数或局部变量的名称都必须在运行时映射到特定的定义(因为eval可能引入了一个新变量来隐藏外部变量)。严格模式下eval仅为正在评估的代码创建变量,因此 eval 不会影响名称是否引用外部变量或某些局部变量

var x = 17;                                       //a local variable
var evalX = eval("'use strict'; var x = 42; x");  //eval an x internally
assert(x === 17);                                 //x is still 17 here
assert(evalX === 42);                             //evalX takes 42 from eval'ed x

如果一个函数声明为“use strict”,则其中的所有内容都将以严格模式执行。以下将执行与上面相同的操作:

function foo(){
    "use strict";

     var x = 17;
     var evalX = eval("var x = 42; x");
     assert(x === 17);
     assert(evalX === 42);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 JavaScript 中指定 eval() 的范围? 的相关文章

  • 在 JavaScript 中生成 RSA 密钥对

    我最近发现了这个 RSA JavaScript 库 http www ohdave com rsa http www ohdave com rsa 但是 它要求预先生成密钥 这是我的问题 问题 我想在 JavaScript 中生成 RSA
  • 定义 js-xlsx 单元格范围

    我正在尝试使用 js xlsx 读取 Excel 值 我可以使用以下代码从工作簿工作表中获取单元格值 if typeof require undefined XLSX require xlsx var workbook XLSX readF
  • ajaxStop() 不触发

    这是不起作用的代码 document ajaxStop function this unbind ajaxStop prevent running again when other calls finish Display everythi
  • 创建一个简单的 10 秒倒计时

    我想要一行这样写的 Your download will begin in 10 9 8 etc Beginning on page load seconds 我已经设置了 10 秒下载文本 并且我还查看了其他 stackoverflow
  • 在鼠标光标位置添加 cytoscape 节点

    我想在画布上的单击事件上的鼠标箭头位置添加一个 cytoscape 节点 我怎样才能做到这一点 我的方法 效果不太好 我可以通过单击创建一个节点 但无法确保创建的节点的位置位于我单击的位置 使用这样的东西 cy click function
  • 确定元素是在页面折叠上方还是下方

    我有一些页面有多个输入框 用户可以在其中输入文本 在单击 下一步 按钮之前 需要填写其中一些内容 我弹出验证错误供用户查看 但是如果问题不在页面上 我希望页面滚动到它 而不是他们必须搜索丢失 错误的字段 我有一个滚动到位 但我无法确定要滚动
  • 如何在 HTML / Javascript 页面中插入 PHP 下拉列表

    好吧 这是我的第二篇文章 请接受我是一个完全的新手 愿意学习 花了很多时间在各个网站上寻找答案 而且我几乎已经到达了我需要到达的地方 至少在这一点上 我有一个网页 其中有许多 javascript 函数 这些函数一起使用 google 地图
  • 使用文件 API 将资源加载到 Three.js 中

    我想创建导入 3D 模型以在浏览器中查看的功能 方法是使用File API http www html5rocks com en tutorials file dndfiles Three js 加载器在我托管的文件上运行良好 我的理解是加
  • 循环遍历元素并逐步为每个元素应用 CSS 规则

    我有一个网格布局 每个网格布局中都有不同数量的元素 我想动态添加内联grid column通过循环遍历 div 中存在的每个元素的 CSS 规则 ul 与一类 list 所以 HTML 代码的输出需要是 ul class list ul u
  • 在 jQuery 可排序中对多个选定项目进行排序?

    我试图在 jQuery 可排序集中选择多个项目 然后将选定的项目一起移动 这是我的弱点开始尝试使其发挥作用 http jsfiddle net benstenson CgD8Y 这是代码 HTML div class container d
  • 了解 JavaScript - 资源

    使用 StackOverflow 的微型 Digit Blog 功能进行描述here https stackoverflow com about 我想发布以下我刚刚看到的 我觉得很有趣的谷歌技术谈话视频 我一直在理解 javascript
  • 在 React Navigation 中将 props 传递给自定义抽屉导航器

    在反应导航抽屉菜单中 我想显示用户名 John Doe 它处于我的主要组件的状态 Router 我怎样才能将自定义抽屉内容组件传递给它 额外信息 我从 AsyncStorage 中获取此名称 组件已挂载 这是我的代码 export defa
  • 如何使用 vanilla JS 实现可维护的反应式 UI

    今天我遇到了一个问题 可以通过使用像 Vue 这样的反应式和状态管理框架来轻松解决 遗憾的是 无法使用它 以下 简化 情况 链接到代码笔 https codepen io theiaz pen BazErKV 我们有一个服务器渲染的页面 其
  • Knockout.js 安全绑定

    我想使用带有淘汰赛的安全绑定 为此我使用敲除安全绑定 js https github com brianmhunt knockout secure binding 谁能解释一下为什么下面的代码不起作用 它会抛出一个错误 未捕获 淘汰 安全
  • Firebase 警告:使用 Firebase Cloud Function 搜索数据时使用未指定的索引

    我构建了一个 Firebase 云函数 用于查找 IsNotificationEnabled 值等于 true 的用户 我的部分职能 export const sendPushNotification functions https onR
  • 尝试在 React 应用程序中连接到 MySQL 数据库时,无法读取未定义的属性(读取“查询”)错误

    我正在尝试连接到 MySQL 数据库并在单击按钮后在 React 应用程序中运行查询 一些它如何给出错误 我当前的代码如下所示 import mysql from mysql function App async function sync
  • RoR - Rails 中的大文件上传

    我有一个 Rails Web 应用程序 允许用户上传视频 视频存储在 NFS 安装的目录中 当前的设置适用于较小的文件 但我也需要支持大文件上传 最多 4GB 当我尝试上传 4GB 文件时 它最终会发生 但从用户体验的角度来看很糟糕 上传开
  • mozilla pdf.js 没有全视图

    我喜欢这个 pdf 查看器https github com mozilla pdf js https github com mozilla pdf js Demo http mozilla github com pdf js web vie
  • 在 HTML5 iOS 7 / iOS 8 中显示十进制键盘

    经过几个小时的搜索后 我只是有一个简单的问题 是否有可能在网络浏览器输入字段中显示小数键盘 input type number 只显示数字 但我需要在左下角使用逗号或点 我尝试过任何事情 pattern step等等 但没有显示十进制键盘
  • 使用 JQuery 根据下拉列表选择的值显示/隐藏控件

    我正在尝试使用 JQuery 根据下拉菜单的选定索引显示 隐藏 div 标签 但它不起作用 任何帮助将不胜感激 Thanks

随机推荐

  • 多线程中的静态变量

    I found that declaring a variable as static makes no sense in 多线程 我认为 这是因为every thread has its own stack 这是唯一的原因吗 我知道sta
  • 如何处理 Elasticsearch 索引中的空值

    我有一个 SQL 表 正在导出到 Elasticsearch 其中一列是可为空的数字字段 某些记录中存在空值 当我们尝试为表建立索引时 会出现以下错误 表的 ETL BigQuery gt ElasticSearch 作业之一 MLS 有
  • SQL查询获取与另一列的最大值相对应的列值?

    好的 这是我的查询 SELECT video category video url video date video title short description MAX video id FROM videos GROUP BY vid
  • 在客户端使用 dc.js,在服务器上使用 crossfilter

    我正在致力于为大型数据集创建交互式可视化 由于数据集大小 无法在浏览器中加载数据集 我们在节点服务器上使用 crossfilter 来加载和过滤服务器端的数据 我想知道是否可以以某种方式将服务器端交叉过滤器过滤器与 dc js 图表结合起来
  • 什么时候适合使用NOLOCK?

    我在一些长时间运行的查询中时不时地遇到超时问题和死锁 我想知道什么时候使用NOLOCK最合适 在哪里使用 我是否在更新和插入中使用它 或阅读 请注意 您可以在每个表的基础上指定 nolock 我通常在复杂的 SELECT 查询中使用 nol
  • 如何将 Spark 中的分类变量转换为一组编码为 {0,1} 的列?

    我正在尝试使用 Spark MLlib 使用 Scala 对包含分类变量的数据集执行逻辑回归 LogisticRegressionWithLBFGS 我发现 Spark 无法使用这种变量 在 R 中 有一种简单的方法来处理此类问题 我将变量
  • 为什么java主类中需要main()方法

    我知道我们可以在没有main 方法的情况下成功编译和运行java程序 但是为什么我们仍然需要在java的主类中使用main 方法呢 每个 Java 应用程序都必须包含一个 main 方法 其签名如下所示 public static void
  • 将项目附加到可变参数函数包装器而不重新分配新切片

    好的 我需要一个 fmt Printf 的小包装以方便调试 1 调用 fmt Fprintln 时参数过多 func Debug a interface if debug fmt Fprintln out prefix sep a 2 接口
  • 将 Django 连接到 Google Cloud SQL

    我正在尝试将 Django 连接到 Google 云 SQL 在 Windows 下使用 python 2 7 和 django 1 5 我浏览了此页面上的说明 https developers google com appengine d
  • 无需递归函数调用的排列

    要求 算法生成集合的所有可能组合 不重复 或递归调用函数返回结果 大多数 如果不是全部的话 的答案在JavaScript 中的排列 从循环或其他函数中递归调用函数以返回结果 循环内递归函数调用的示例 function p a b res v
  • phpMyAdmin 不显示添加的列

    自从我得到 phpMyAdmin 3 5 2 2 以来 出现了一个奇怪的问题 当我向特定表添加新列时 它不会显示在概述中 这个问题只出现在一张表上 其他都正常 在设置中找不到某些内容 我也有过这样的经历 XAMPP 1 8 1 PHP 5
  • 使单个函数适用于列表、字节字符串和文本(或许还有其他类似的表示形式)

    我正在编写一个函数 它可以在任意符号序列中进行一些搜索 我想让它足够通用 以便它可以在列表上运行 Foldable以及ByteStrings and Texts 将其概括为Foldable很简单 但如何包含ByteStrings and T
  • 等待 .NET 4.0 中的替代方案?

    NET 4 0 中await 关键字的最佳替代方案是什么 我有一个方法需要在异步操作后返回一个值 我注意到 wait 方法完全阻塞了线程 从而使异步操作变得无用 我可以选择哪些选项来运行异步操作 同时仍释放 UI 线程 我认为你的基本选择是
  • 为什么嵌套实例化中没有可用的 TypeTag(当由 scala 代码运行程序解释时)?

    我正在尝试改变的行为List toString根据其类型参数 自从List无法扩展 它由自定义类包装CList 可能是隐含的 但问题仍然是一样的 打印时出现问题CList of CLists 以下是示例和注释中的相应输出 object Fo
  • hibernate、mysql、glassfish v3 和 JTA 数据源

    我正在尝试将 hibernate 实体管理器与 mysql 和 glassfish 一起使用 尝试使用 JTA 数据源时出现以下错误 Caused by org hibernate HibernateException The chosen
  • Docker RUN ls 显示缓存文件

    我正在尝试设置一个 docker 容器并正在使用RUN ls帮助调试 然而 当我跑步时RUN ls docker 打印出以下内容 gt Using cache gt 96223b1b0748 我希望它注销文件夹中的文件 有谁知道会发生什么
  • 创建一个带有 Action 多个参数的任务

    我想在包含操作的任务中添加多个参数 我回顾了现有的堆栈溢出问题使用操作创建任务 请帮助我如何在任务的操作方法中传递多个参数 Action
  • 使滚动条在移动浏览器中可见

    当我有一个带有可滚动内容的网页时 使用CSS属性 overflow auto 或 overflow visible 滚动条在桌面浏览器上可见 但是当我在移动浏览器上打开页面时 滚动条仅在我尝试滚动时才会出现 有没有办法让滚动条在移动设备上始
  • Rails 中的 PG pg_ext 加载错误

    我最近更新到了 Rails 4 1 6 和 ruby 2 1 3p242 我还更新了系统上的所有宝石 创建新应用程序后 我在运行服务器时不断收到 pg ext 加载文件错误 我使用的是 Windows 8 x64 和 PostgreSQL
  • 在 JavaScript 中指定 eval() 的范围?

    有什么方法可以在特定范围内执行 eval 但不是全球性的 例如 以下代码不起作用 第二条语句中 a 未定义 因为它们位于不同的范围内 eval var a 1 eval alert a 如果可能的话 我想动态创建一个范围 例如 语法肯定是错