首页 > 其他分享 >为什么js中不推荐使用eval函数

为什么js中不推荐使用eval函数

时间:2023-10-07 09:37:02浏览次数:28  
标签:函数 作用域 代码 js eval 全局 执行

eval函数的作用

'eval'函数是javascript中的一个内置函数,它的主要作用是将传入的字符串作为代码来执行。换句话说,'eval'可以将动态生成的字符串当作javascript代码来执行,并返回执行结果。

我的理解就是它可以执行传入的代码,并返回执行结果。

为什么不推荐使用eval

1、安全性问题:

'eval'可以执行任何传入的字符串,所以意味着如果不小心,恶意代码或用户输入的不受信任的数据可能会被执行,导致安全漏洞。将造成代码注入攻击。

2、性能问题:

因为'eval'在运行时动态解析和执行代码,所以它会比直接编写的代码运行更慢。这对于性能敏感的应用程序来说可能是一个问题。

3、限制作用域:

在'eval'中声明的变量通常会在全局作用域中创建,而不是包含在'eval'的函数的作用域中。可能会导致不希望的变量覆盖或污染全局作用域

全局作用域内的 eval:如果 eval 函数在全局作用域内调用,它可以访问和修改全局作用域中的变量。

var x = 10;
eval("x = 20;");
console.log(x); // 输出 20,全局作用域中的 x 被修改

函数作用域内的 eval:如果 eval 函数在函数内部调用,它可以访问和修改函数作用域中的变量,并且可能会创建新的局部变量。

function example() {
  var y = 30;
  eval("var y = 40;");
  console.log(y); // 输出 40,eval 创建了一个新的局部变量 y
}

example();

4、可维护性问题:

使用'eval'可能使代码变得难以理解和维护,因为它使代码的执行路径更加不明确。动态生成和执行代码的方式通常不利于代码的可读性和可维护性

5、不利于代码优化:

由于'eval'的代码是动态生成的,javascript引擎很难对其进行优化。可能会导致代码在某些情况下运行得更慢。

标签:函数,作用域,代码,js,eval,全局,执行
From: https://www.cnblogs.com/ipangpang/p/17745490.html

相关文章

  • jsp与Dao层合作实现分页功能
    studentList.jsp里面加样式居中和分页栏居中:.pagination{    text-align:center;}  分页栏: <divclass="pagination">    <c:iftest="${currentPage>1}">        <ahref="${pageContext.request.contextPath}/ShowStudentServlet?pa......
  • js 获取当天属于当年中第几周
      functiongetWeek(dt){letd1=newDate(dt);letd2=newDate(dt);d2.setMonth(0);d2.setDate(1);letrq=d1-d2;letdays=Math.ceil(rq/(24*60*60*1000));......
  • MATLAB图论工具箱(哪有什么工具箱,就只是一堆函数而已)
    MATLAB图论工具箱图论基础Matlab图论工具箱提供了构建、操作和分析图形的函数和工具。在Matlab图论工具箱中,可以使用以下基本数据结构:graph:无向图。digraph:有向图。可以使用以下函数创建一个图或有向图:graph:创建一个无向图。digraph:创建一个有向图。%创建无......
  • 无涯教程-OC - Image View函数
    ImageView用于显示单个图像或动画序列。ImageView-重要属性imageHighlightingImageuserInteractionEnabledanimationImagesanimationRepeatCountImageView-重要方法-(id)initWithImage:(UIImage*)image-(id)initWithImage:(UIImage*)imagehighlightedIm......
  • c# 用SapNwRfc调用sap内置bom函数用TreeView把bom展示出来
    一个需求,winform根据料号,查询sap 的bom,然后用控件调用sap内置bom函数,根据料号查询bom用TreeView把bom展示出来树形控件TreeView展示出来,TreeView的好处是父级子级直观明了。sap关于bom 的tcode 主要是cs11,cs12,cs13。cs12可以显示多级bom,查询出来是这样的: 这种表现方式,不是......
  • JSON
    JSON存储数据格式绝对主流json的三种数据类型:简单值,对象,数组;三种类型即可存储世界上任意一种数据类型优点:方便,快捷,好读简单值:name:"张三”age:18对象 数组等价于Java的数组(用[]表示)[1,2,"ab",3]复杂数组: JavaScript有一个全局对象JSON,对象主要有俩方法:1.stringi......
  • Flutter/Dart第11天:Dart函数方法详解
    Dart官方文档:https://dart.dev/language/functions重要说明:本博客基于Dart官网文档,但并不是简单的对官网进行翻译,在覆盖核心功能情况下,我会根据个人研发经验,加入自己的一些扩展问题和场景验证。Dart语言是纯面向对象的编程语言,就是是函数也是对象,它的类型就是Function类(https://......
  • 前端​​join()​​函数
    在前端开发中,join()函数是用于数组的一个方法。它将数组中的所有元素按照指定的分隔符连接起来,并返回一个字符串。该函数的语法如下:array.join(separator)其中,array是要被连接的数组,separator是数组元素之间的分隔符。分隔符可以是一个字符串,用于在每个数组元素之间进行分隔。如果......
  • 无涯教程-OC - Tab bar函数
    通常用于在同一视图中的各种子任务,视图或模型之间切换。标签栏的如下所示。Tabbar-重要属性backgroundImageitemsselectedItemTabbar-示例代码步骤1-创建一个新项目,然后选择TabbedApplication而不是基于View的应用程序,然后单击next,指定项目名称并选择创建......
  • springboot项目-前台往后台传递json数据
    1、json数据对应实体类,用实体类接收----------------------------前台----------------------------------$.ajax({type:"POST",url:"/monster/updateMonster",contentType:"application/json",data:JSON.stringify(monster1),success:......