千家信息网

JavaScript中Eval函数的介绍以及如何执行代码字符串

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,JavaScript中Eval函数的介绍以及如何执行代码字符串,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Eval:执行代码字符串内建
千家信息网最后更新 2026年11月03日JavaScript中Eval函数的介绍以及如何执行代码字符串

JavaScript中Eval函数的介绍以及如何执行代码字符串,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

Eval:执行代码字符串

内建函数 eval 允许执行一个代码字符串。

语法如下:

let result = eval(code);

例如:

let code = 'alert("Hello")'; eval(code); // Hello

代码字符串可能会比较长,包含换行符、函数声明和变量等。

eval 的结果是最后一条语句的结果。

例如:

  1. let value = eval('1+1');

  2. alert(value); // 2

let value = eval('let i = 0; ++i'); alert(value); // 1

eval 内的代码在当前词法环境(lexical environment)中执行,因此它能访问外部变量:

let a = 1;  function f() {   let a = 2;    eval('alert(a)'); // 2 }  f();

它也可以更改外部变量:

let x = 5; eval("x = 10"); alert(x); // 10,值被更改了

严格模式下,eval 有属于自己的词法环境。因此我们不能从外部访问在 eval 中声明的函数和变量:

// 提示:本教程所有可运行的示例都默认启用了严格模式 'use strict'  eval("let x = 5; function f() {}");  alert(typeof x); // undefined(没有这个变量) // 函数 f 也不可从外部进行访问

如果不启用严格模式,eval 没有属于自己的词法环境,因此我们可以从外部访问变量 x 和函数 f。

使用 "eval"

现代编程中,已经很少使用 eval 了。人们经常说"eval 是魔鬼"。

原因很简单:很久很久以前,JavaScript 是一种非常弱的语言,很多东西只能通过 eval 来完成。不过那已经是十年前的事了。

如今几乎找不到使用 eval 的理由了。如果有人在使用它,那这是一个很好的使用现代语言结构或 JavaScript Module[1] 来替换它们的机会。

请注意,eval 访问外部变量的能力会产生副作用。

代码压缩工具(在把 JS 投入生产环境前对其进行压缩的工具)将局部变量重命名为更短的变量(例如 a 和 b 等),以使代码体积更小。这通常是安全的,但在使用了 eval 的情况下就不一样了,因为局部变量可能会被 eval 中的代码访问到。因此压缩工具不会对所有可能会被从 eval 中访问的变量进行重命名。这样会导致代码压缩率降低。

在 eval 中使用外部局部变量也被认为是一个坏的编程习惯,因为这会使代码维护变得更加困难。

有两种方法可以完全避免此类问题。

如果 eval 中的代码没有使用外部变量,请以 window.eval(...) 的形式调用 eval:

通过这种方式,该代码便会在全局作用域内执行:

let x = 1; {   let x = 5;   window.eval('alert(x)'); // 1(全局变量) }

如果 eval 中的代码需要访问局部变量,我们可以使用 new Function 替代 eval,并将它们作为参数传递:

let f = new Function('a', 'alert(a)');  f(5); // 5

我们在 ["new Function" 语法](https://zh.javascript.info/new-function ""new Function" 语法") 一章中对 new Function 构造器进行了详细说明。new Function 从字符串创建一个函数,并且也是在全局作用域中的。所以它无法访问局部变量。但是,正如上面的示例一样,将它们作为参数进行显式传递要清晰得多。

总结

调用 eval(code) 会运行代码字符串,并返回最后一条语句的结果。

  • 在现代 JavaScript 编程中,很少使用它,通常也不需要使用它。

  • 可以访问外部局部变量。这被认为是一个不好的编程习惯。

  • 要在全局作用域中 eval 代码,可以使用 window.eval(code) 进行替代。

  • 此外,如果你的代码需要从外部作用域获取数据,请使用 new Function,并将数据作为参数传递给函数。

作业题

先自己做题目再看答案。

Eval-计算器

重要程度:??????????

创建一个计算器,提示用户输入一个算术表达式,并返回其计算结果。

在本题中,你不需要检查表达式是否正确。只需要计算并返回结果。

看完上述内容,你们掌握JavaScript中Eval函数的介绍以及如何执行代码字符串的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

代码 变量 函数 字符 字符串 局部 结果 作用 全局 环境 编程 参数 工具 方法 模式 词法 语法 问题 内容 原因 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网络科技 广州为想互联网科技有限公司 科技互联网龙头 疫情对互联网科技公司影响 盈实互联网科技 互联网科技金融公司 青岛互联网科技公司 广州互联网络科技有限公司 万达互联网科技 互联网科技宣传片 互联网汽车科技小镇 互联网科技公司有风险吗 浙南科技城互联网大厦建设工程 互联网科技公司营业执照怎么办理 科技互联网的核心竞争力 广州有谷有贝互联网科技有限公司 2021世界互联网领先科技成果发布 广东鹅鹅鹅互联网科技有限公司 互联网硬科技公司 美国五大互联网科技公司市值多少 深圳互联网科技公司 时间互联网络科技 中国最先进互联网科技公司 崇明区互联网教育科技诚信经营 晓花互联网科技有限公司网址 区块链结合互联网科技 互联网风格科技公司名称 郑州欣桑互联网科技有限公司 互联网的科技体现在哪里 银川新华互联网科技学校招聘
0