聊聊JavaScript中eval()函数的用法

本篇文章给大家介绍一下javascripteval()函数的用法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

聊聊JavaScript中eval()函数的用法

1. eval函数有什么用?

调用eval函数,可以将其参数作为javascript程序进行解释。换句话说,eval可以把它的参数当做代码

来执行。

例子

function f(x) {    eval('var y=x');    console.log('y:', y);}f('hello');//y:hello

登录后复制

在这个例子中,eval将它的string参数var y=x作为一行代码执行了,在函数f内部声明了一个局部变量y。这和

立即学习“Java免费学习笔记(深入)”;

function f(x) {    var y=x;    console.log('y:', y);}f('hello');//y:hello

登录后复制

的执行效果基本相同。

2. 避免使用eval函数创建局部变量

允许eval函数干扰作用域,是一个相当错误的做法。这种做法会使一段代码变得难以理解,并且不再安全。下面这个例子便赋予了外部调用者修改局部变量,改变局部作用域的能力。

例子

let g = '全局变量'function f(src) {    eval(src);    console.log('g:', g);}//以上为源代码f("var g= '局部变量'");//g:局部变量f("var y= '局部变量'");//g:全局变量

登录后复制

当我们把一个没有在源代码中定义的变量y,传入eval函数时,这段代码执行的结果将变得难以预测。

保证eval函数不影响外部作用域的一个简单方法是使用嵌套的作用域。ES5的严格模式便是这样做的。

例子

let g = '全局变量'function f(src) {   (()=> eval(src))();//在嵌套作用域中执行eval    console.log('g:', g);}//以上为源代码f("var g= '局部变量'");//g:全局变量f("var y= '局部变量'");//g:全局变量

登录后复制

3. eval函数的两种调用方式

3.1 直接调用方式:

当函数调用涉及eval标识符时,可以称为直接调用。此时,被执行的程序(eval的参数)具有完全访问调用者局部作用域的权限。

例子

const g = '全局变量';function foo() {    const g = '局部变量';    console.log(eval('g'));//直接调用,可以访问到foo的局部作用域,所以输出的是局部变量g}foo(); //局部变量

登录后复制

3.2 间接调用方式:

绑定eval到另一个变量名,在通过该变量调用eval,称之为间接调用。此时,被执行的程序(eval的参数)失去对局部作用域的访问能力。利用逗号操作符,,可以实现间接调用的简洁写法。

例子

const g = '全局变量';function foo2() {    const g = '局部变量';    cont test = eval;    //间接调用,不能访问函数内部的变量g    console.log(test('g')); //全局变量    //间接调用简洁方式    console.log((0, eval)('g'));//全局变量}

登录后复制

更多编程相关知识,请访问:编程入门!!

以上就是聊聊JavaScript中eval()函数的用法的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2712850.html

(0)
上一篇 2025年3月7日 21:18:22
下一篇 2025年3月6日 12:16:09

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 浅谈JavaScript中的事件委托

    本篇文章给大家介绍一下javascript中的事件委托。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 事件委托 利用事件冒泡,指定一个事件处理程序,管理一系列的所有事件事件委托利用DOM元素的事件冒泡,把子元素的相关事件…

    2025年3月7日 编程技术
    200
  • JavaScript中如何更好地使用数组

    本篇文章给大家介绍一下如何在 javascript 中更好地使用数组。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 本文短小精悍,我保证。在过去的数个月里,我注意到在我审阅的 pull request 中有四个(关于数组…

    2025年3月7日
    200
  • 10个让你效率更高的Math对象方法,快来收藏吧!

    本篇文章给大家介绍一下能让你事半功倍的10个math对象方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 JavaScript中的math 对让我们能够对执行一些数学操作。 它具有数学常数和函数的属性和方法。 在今天的…

    2025年3月7日
    200
  • js怎么替换html标签

    在js中,可以利用replace()函数配合正则表达式“//g”来替换html标签,语法格式“stringObject.replace(//g,”)”。replace()可以替换一个与正则表达式匹配的子串。 本教程操作环境:wi…

    2025年3月7日
    200
  • 深入解析JavaScript中的作用域

    本篇文章带大家深入理解javascript作用域。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 这篇文章称为笔记更为合适一些,内容来源于 《你不知道的JavaScript(上卷)》第一部分 作用域和闭包。讲的很不错,非常…

    2025年3月7日
    200
  • 分享12个提升程序员软技能与效率的开发工具

    本篇文章给大家推荐12个提升程序员软技能与效率的开发工具。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 大家好,我是你们的 猫哥,那个不喜欢吃鱼、又不喜欢喵 的超级猫 ~ 这一期的内容有点不一般哦,先来几个在线绘图类的工…

    2025年3月7日 编程技术
    200
  • Math.max()不带参数会返回什么?为什么?

    本篇文章给大家介绍一下math.max()不带参数会返回什么?为什么?有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 Math.max() 是 JS 内置的方法,可以从传入的参数中,返回最大的一个。例如: Math.max…

    2025年3月7日
    200
  • 手把手教你理解JS中的执行上下文

    本篇文章一步步带你深入理解javascript中的执行上下文。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 只有理解了执行上下文,才能更好地理解 JavaScript 语言本身,比如变量提升,作用域,闭包等 执行上下文 …

    2025年3月7日
    200
  • 深入了解TypeScript中的5种设计模式

    本篇文章带大家深入了解5 种 typescript设计模式。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 设计模式是可以帮助开发人员解决问题的模板。在本中涉及的模式太多了,而且它们往往针对不同的需求。但是,它们可以被分为…

    2025年3月7日
    200
  • 手把手带你弄懂JavaScript中的异步编程

    本篇文章带大家了解javascript中的异步编程。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 异步,就是非同步…. 这节内容可能会有点枯燥,但是却是 JavaScript 中非常重要的概念,非常有必要去学…

    2025年3月7日 编程技术
    200

发表回复

登录后才能评论