首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么人们说javascript eval()是邪恶的,但你对setTimeout和setInterval等没有异议?

人们说JavaScript的eval()函数是邪恶的,主要是因为它存在安全风险和性能问题。eval()函数可以执行任意的JavaScript代码字符串,这意味着它可以执行来自不可信源的恶意代码,从而导致安全漏洞。此外,eval()函数的执行会导致动态解析和编译代码,对性能有一定的影响。

相比之下,setTimeout和setInterval等函数并不具有相同的安全和性能问题。这些函数用于实现定时执行代码的功能,但它们并不会执行任意的代码字符串,而是接受一个函数作为参数进行执行。因此,它们不会引入安全风险。

此外,setTimeout和setInterval等函数的使用是受限的,它们通常用于实现一些需要延迟执行或定时执行的功能,比如动画效果、定时刷新数据等。相比于eval()函数,它们的使用场景更加明确,不会被滥用。

总结来说,人们认为JavaScript的eval()函数是邪恶的主要是因为它的安全风险和性能问题,而setTimeout和setInterval等函数则没有这些问题,并且有明确的使用场景。因此,对于eval()函数的使用应该谨慎,而对于setTimeout和setInterval等函数的使用则没有异议。

(注:腾讯云相关产品和产品介绍链接地址请自行搜索,不便提供)

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

JavaScript糟粕部分

JavaScript一门优秀语言,但是难免存在着某些缺点,本博文主要说明下JavaScript一些缺点。 JavaScript有两组相等运算符:===!==,以及他们邪恶孪生兄弟==!...最好永远不要使用那邪恶孪生兄弟。相反,请始终使用===!==。如果上面的比较都是用===运算符,结果都是false,在编程中规定使用,很是受益。 ⚠️传递性一种编程约定。...eval eval函数传递了一个字符串给JavaScript编译器,并且执行其结果。它是一个被滥用JavaScript特性。那些JavaScript语言一知半解的人们最常用到它。...Function 构造器eval另一种形式,同样也应该避免使用它。 浏览器提供setTimeoutsetInterval函数,他们能够接受字符串参数或函数参数。...当传递字符串参数时,setTimeoutsetInterval会像eval那样去处理。同样也应该避免使用字符串参数形式。 continue语句 continue语句跳转到循环顶部。

48310

译文:开发人员面临 10个最常见JavaScript 问题

收到上述错误原因,当你调用setTimeout()时,实际上在调用window.setTimeout()。...这是为什么? 内存泄漏几乎不可避免JavaScript问题,如果没有有意识地编码以避免它们。 让我们更详细地研究一下: 每个theThing对象都包含自己1MB longStr对象。...例如,对于许多JavaScript开发人员来说,以下一些内容很麻烦: 关于最后两个,尽管(这可能会导致人们相信他们会评估为false),{}[]事实上,对象,任何对象都将被迫在JavaScript...很少解释,如果将字符串作为setTimeoutsetInterval第一个参数传递,它将传递给函数构造函数以转换为新函数。这个过程可能缓慢且效率低下,而且没必要。...那么,这里将是setIntervalsetTimeout相当典型使用,将字符串作为第一个参数: 更好选择传入函数作为初始参数;例如: JavaScript 问题#10:未能使用“严格模式”

1.3K20
  • 开发人员面临10个最常见JavaScript问题

    事实上,对于任何有经验前端开发人员来说,在网页中建立基本JavaScript功能一项相当简单任务,即使他们JavaScript新手。然而,这种语言比人们最初认为要细致、强大和复杂得多。...JavaScript块级作用域支持通过let关键字实现。Let关键字已经被浏览器Node.js后端JavaScript引擎广泛支持了多年。...问题5:低效DOM操作 使用 JavaScript 操作DOM(即添加、修改删除元素)相对容易,操作效率却不怎么样。...很少有人解释,如果把字符串作为setTimeoutsetInterval第一个参数,它将被传递给函数构造器,被转换成一个新函数。这个过程可能很慢,效率也很低,而且很少有必要。...使得eval()更加安全。eval()在严格模式非严格模式下行为方式有一些不同。最重要,在严格模式下,在eval()语句中声明变量函数不会在包含范围内创建。

    82010

    JavaScript语言精粹》学习笔记

    大多数其他语言不同,JavaScript数组length没有上界。 !!! 数组length属性不一定等于数组长度。...JavaScript没有一个好机制来区别数组对象。...附录A - 毒瘤 JavaScript中一些不可避免问题特征,必须知道这些问题并准备好应对措施。 伪数组 JavaScript没有真正数组。...== JavaScript有梁旭相等运算符: ===!==,以及它们邪恶孪生兄弟==!=。 如果两个运算数类型一致且拥有相同值,则===返回true,否则!==返回false。 ==!...浏览器提供setTimeoutsetInterval函数,它们能接受自渡船参数或者函数参数,当传递字符串参数时,setTimeoutsetInterval函数会像eval那样去处理,所以应该避免使用字符串参数形式

    38420

    setInterval用法

    func 你想要重复调用函数。 code 另一种语法应用,指你想要重复执行一段字符串构成代码(使用该语法不推荐,不推荐原因eval()一样)。...delay 每次延迟毫秒数 (一秒于1000毫秒),函数每次调用会在该延迟之后发生。setTimeout一样,实际延迟时间可能会稍长一点。...需要注意,IE不支持第一种语法中向延迟函数传递额外参数功能.如果你想要在IE中达到同样功能,必须使用一种兼容代码 (查看callback arguments 一段)....无论使用setInterval()还是setTimeout(),函数执行环境会被设置成window,也就是在函数内使用this其实是指window对象(或global全局对象,ES没有指明如何访问global...MDN原文建议用自己写setInterval代替原生setInterval,众所周知JavaScript函数prototype包括callapply方法,这两种方法第一个参数可以接受this

    1.4K20

    【前端技能树-需要避免坑】Javascript 开发者容易在花田里犯

    一切都取决于开发/生产环境。得到这个错误原因是因为,当你调用 setTimeout() 时,实际上在调用 window.setTimeout()。...至于最后两个,尽管{}[]实际上都是对象,并且任何对象都将在JavaScript 中强制为布尔值 true,这与ECMA-262规范一致。...没有使用 “严格模式” “严格模式”一种在运行时自愿 JavaScript 代码执行更严格解析错误处理方法,也是一种使代码更安全方法。...使 eval()更安全。eval()在严格模式非严格模式下行为方式有所不同。最重要,在严格模式下,在eval()语句中声明变量函数不会在包含范围内创建。...相反,缺乏 JavaScript 概念正确理解许多 JavaScript问题根源。彻底熟悉语言细微差别微妙之处提高编码效率最有效策略。

    19211

    所不知道setTimeout

    JavaScript提供定时执行代码功能,叫做定时器(timer),主要由setTimeout()setInterval()这两个函数来完成。它们向任务队列添加定时任务。...由于前面的任务到底需要多少时间执行完,不确定,所以没有办法保证,setTimeoutsetInterval指定任务,一定会按照预定时间执行。...答案不会。因为setTimeout运行机制过,必须要等到当前脚本同步任务“任务队列”中已有的事件,全部处理完以后,才会执行setTimeout指定任务。...setTimeoutsetInterval返回整数值连续(一定环境下,比如浏览器控制台,或者js执行环境),也就是,第二个setTimeout方法返回整数值,将比第一个整数值大1。...: 所不知道setInterval JavaScript 之 this 详解 JavaScript 字符串实用常操纪要 Javascript 数组操作 JavaScript 字符串间比较

    1.8K121

    setTimeout那些事

    在不使用其它新员工(webworker情况下,JS如何在单线程上处理复杂操作和逻辑,以至于在用户看来可以同时响应不同操作呢? 我们还是以Boss来称呼javascript主线程吧。...他Promise会帮你做任务肯定会做(只要他没有猝死。。),时间上可能并不一定严格符合要求,毕竟小本本上可能不仅只有一条任务。...setInterval:我愚蠢弟弟啊。。肯定是使用方法不对! setTimeout:考虑到JS运行环境特点,定时方法可能会连续执行,之间没有预期间隔。...JS主线程步同任务执行时间很长,并且异步队列中只有我在往其中添加任务,导致我在异步队列中重复添加任务没有及时被执行,然后JS主线程空闲后,我添加多个任务就会连续执行,吗?...setTimeout那个检测机制我知道,我想说,当JS主线程中正在执行添加任务,如果此时异步任务队列为空,再向队列中添加异步任务时,JS主线程执行完上次添加任务,会立刻执行这次添加任务

    1.6K10

    setTimeout那些事

    在不使用其它新员工(webworker情况下,JS如何在单线程上处理复杂操作和逻辑,以至于在用户看来可以同时响应不同操作呢? 我们还是以Boss来称呼javascript主线程吧。...他Promise会帮你做任务肯定会做(只要他没有猝死。。),时间上可能并不一定严格符合要求,毕竟小本本上可能不仅只有一条任务。...setInterval:我愚蠢弟弟啊。。肯定是使用方法不对! setTimeout:考虑到JS运行环境特点,定时方法可能会连续执行,之间没有预期间隔。...JS主线程步同任务执行时间很长,并且异步队列中只有我在往其中添加任务,导致我在异步队列中重复添加任务没有及时被执行,然后JS主线程空闲后,我添加多个任务就会连续执行,吗?...setTimeout那个检测机制我知道,我想说,当JS主线程中正在执行添加任务,如果此时异步任务队列为空,再向队列中添加异步任务时,JS主线程执行完上次添加任务,会立刻执行这次添加任务

    2.1K00

    js 定时器笔记

    一、定时器(timer) JavaScript提供定时执行代码功能,该功能主要由setTimeout()setInterval()这两个函数来实现 二、setTimeout() 1、使用规则 setTimeout...2、使用注意 推迟执行代码必须以字符串形式,放入setTimeout。 因为引擎内部使用eval函数,将字符串转为代码。 如果推迟执行函数,则可以直接将函数名,放入setTimeout。...一方面eval函数有安全顾虑,另一方面为了便于JavaScript引擎优化代码,setTimeout方法一般总是采用函数名形式 ?...四、解除定时器clearTimeout(),clearInterval() setTimeoutsetInterval函数,都返回一个表示计数器编号整数值。...同步任务那些没有被引擎挂起、在主线程上排队执行任务。只有前一个任务执行完毕,才能执行后一个任务。 异步任务那些被引擎放在一边,不进入主线程、而进入任务队列任务。

    7.3K60

    每天10个前端小知识 【Day 12】

    说说对事件循环理解 JavaScript 在设计之初便是单线程,即指程序运行时,只有一个线程存在,同一时间只能做一件事 为什么要这么设计,跟JavaScript应用场景有关 JavaScript...简单来说,执行上下文一种Javascript代码执行环境抽象概念,也就是只要有Javascript代码运行,那么它就一定是运行在执行上下文中 执行上下文类型分为三种: 全局执行上下文:只有一个...说说闭包理解,以及闭包使用场景 一个函数其周围状态(lexical environment,词法环境)引用捆绑在一起(或者函数被引用包围),这样组合就是闭包(closure)。...也就是,闭包让可以在一个内层函数中访问到其外层函数作用域。 在 JavaScript 中,每当创建一个函数,闭包就会在函数创建同时被创建出来,作为函数内部与外部连接起来一座桥梁。...在前端实现中我们一般通过 setTimeout setInterval 方法来实现一个倒计时效果。

    13410

    Web前端新手都应该了解JavaScript 开发技巧

    为了最大化减少类似错误,请在你 debugger 中运行代码,确认没有遇到任何细微错误。 4、避免 Eval JS 在没有 eval 方法时候也可以很好工作。...5、 最小化 DOM 访问 DOM 最复杂 API,会使得代码执行过程变慢。有时候 web 页面可能没有加载或者加载不完整。最好避免 DOM。...6、尽可能保持代码简洁 可能大家都听到过了N遍这个代码简洁问题了。作为一个开发人员可能在你代码开发过程中使用了很多次,千万不要在 js 开发中忘记这点。...§ 尽量在开发模式中添加注释空格,这样保持代码可读性 § 在发布到产品环境前请将空格注释都删除,并且尽量缩写变量方法名 使用第三方工具帮助你实现压缩 javascript。...7、不要用 “SetTimeOutSetinterval” 方法来作为 “Eval备选 setTimeOut( "document.getID('value')", 3000); 在以上代码中

    49200

    setTimeoutrequestAnimationFrame

    目录 单线程模型 任务队列 setTimeout setTimeoutsetInterval requestAnimationFrame requestidlecallback 单线程模型 JavaScript...为什么JavaScript单线程呢? 这主要与JavaScript用途有关。它主要用途与用户互动,以及操作DOM。...多进程可以充分利用现代 CPU 多核优势。 方便使用沙盒模型隔离插件进程,提高浏览器稳定性。 进程线程又是什么呢 进程(process)线程(thread)操作系统基本概念。...而javascript引擎这个问题解决:当使用setInterval()时,仅当没有该定时器任何其他代码实例时,才将定时器代码添加到队列中。...,类似于setTimeout,主要用途按帧网页进行重绘。

    1.8K20

    小白理解 JavaScript 执行机制

    1.JavaScript为什么单线程? JavaScript语言一大特点就是单线程,也就是,同一个时间只能做一件事。那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊。...setTimeout() setInterval() 产生任务 异步任务,也属于 宏任务。 setTimeout() 接受两个参数,第一个回调函数,第二个推迟执行毫秒数。...所以setTimeout() setInterval() 第二个参数设置时间并不是绝对,它需要根据当前代码最终执行时间来确定,简单来说,如果当前代码执行时间(如执行200ms)超出了推迟执行...(setTimeout(fn, 100))或反复执行时间(setInterval(fn, 100)),那么setTimeout(fn, 100) setTimeout(fn, 0) 也就没有区别了...,setInterval(fn, 100) setInterval(fn, 0) 也就没有区别了。

    60832

    JavaScript怎么模拟 delay、sleep、pause、wait 方法

    如果为什么“怎么做”原因感到好奇,还有更多可以学习内容。JavaScript中处理时间有其细微之处,了解这些可能会对有所帮助。...理解JavaScript执行模型 现在我们已经有了一个快速解决方案,让我们深入了解JavaScript执行模型机制。理解这一点于有效地管理代码中时间异步操作至关重要。...如何在JavaScript中正确使用SetTimeout 既然我们已经更好地理解了JavaScript执行模型,让我们看看JavaScript如何处理延迟异步代码。...; }, 2000); 也可以将一段代码字符串传递给 setTimeout 以供其执行: 然而,这种方法不可取,因为: 它很难阅读(因此很难维护/或调试) 它使用了一个隐含 eval,这是一个潜在安全风险...好吧,也不完全是…… 如何在JavaScript中编写更好Sleep函数 也许这段代码正是所期望请注意,它有一个很大缺点:循环会阻塞JavaScript执行线程,并确保在它完成之前没有人能与程序进行交互

    3.4K40

    定时器

    定时器 JavaScript提供定时执行代码功能,叫做定时器(timer),主要由setTimeout()setInterval()这两个函数来完成。...需要注意,推迟执行代码必须以字符串形式,放入setTimeout,因为引擎内部使用eval函数,将字符串转为代码。如果推迟执行函数,则可以直接将函数名,放入setTimeout。...一方面eval函数有安全顾虑,另一方面为了便于JavaScript引擎优化代码,setTimeout方法一般总是采用函数名形式,就像下面这样。...运行机制 setTimeoutsetInterval运行机制,将指定代码移出本次执行,等到下一轮 Event Loop 时,再检查是否到了指定时间。...由于前面的任务到底需要多少时间执行完,不确定,所以没有办法保证,setTimeoutsetInterval指定任务,一定会按照预定时间执行。

    1.4K60

    【THE LAST TIME】彻底吃透 JavaScript 执行机制

    目录皆为暂定 执行 & 运行 首先我们需要声明下,JavaScript 执行运行两个不同概念,执行,一般依赖于环境,比如 node、浏览器、Ringo JavaScript 在不同环境下执行机制可能并不相同...而所谓异步任务就是主线程执行到这个 task 时候,“唉!会,我现在先不执行,等我 xxx 完了以后我再来等你执行” 注意上述我等你来执行。...然后收拾电脑(同步任务)、收拾书包(同步任务)、给女朋友打电话说出来吃饭吧(必然异步任务),然后女朋友会,我先化个妆,等我画好了call。...结果等她一个小时后我化好妆了,我们出去吃饭吧。不行!我 bug 还没有解决掉呢?会。。。。其实这个时候一小时化妆还是 5 分钟化妆都已经毫无意义了。。。...这里我们只 JavaScript 执行机制。 如上所说,promise.then 、catch finally 属于 MicroTask。这里主要是异步区分。

    45020

    前端冲刺必备指南-执行上下文作用域链闭包一公民

    想必一部分程序员很少用过这,so,不必解释,记住这是运行在eval函数中代码,只有在eval函数中代码才有eval函数执行上下文 理解了执行上下文(即环境),那么需要了解在JavaScript程序中执行流...so,这就是为什么可以在声明之前访问var定义变量,如果在声明之前访问letconst定义变量就会提升引用错误原因。...而var id = setInterval(fn, delay)类似于setTimeout连续调用该函数,直到被取消。...它允许为异步操作成功失败分别绑定相应处理方法。这让异步方法可以像同步方法那样返回值,并不是立即返回最终执行结果,而是一个能代表未来出现结果promise对象。...,对象之间关系如下图所示 闭包同时含有函数对象以及作用域对象引用最想,实际上,所有JavaScript对象都是闭包。

    83810
    领券