js函数的按值传递参数

本文主要为大家分享一篇js的函数的按值传递参数的实例,具有很好的参考价值,一起跟随小编过来看看吧,希望对大家有所帮助,希望能帮助到大家。

js的函数传参的方式是按值传递,正常情况下,改变函数参数的值,并不会对函数外部的变量造成影响。例如:

'use strict';var list = [1, 2, 3];list.forEach(function(item) { item ++;});console.log(list); // [ 1, 2, 3 ]

登录后复制

这是因为js的函数在接收参数时,会生成一个副本变量,该副本变量等于参数的值,可以分析js这样运行的:

'use strict';var list = [1, 2, 3];list.forEach(function(item, i) { // 第一个item是副本,第二个item是数组元素list[i] var item = item; // 副本item++ item ++; // 打印的是副本的值 console.log(item); // 2, 3, 4});// 原数组不会改变console.log(list); // [ 1, 2, 3 ]

登录后复制

但是当函数的参数传递的是一个对象呢?

'use strict';var list = [{a: 1, b: 2}];list.forEach(function(item) { item.a ++;});console.log(list); // [ { a: 2, b: 2 } ]

登录后复制

发现函数内部居然改变了函数外部变量的值,那这又是为什么呢?

我们来分析js是如何运行这段代码的

'use strict';var list = [{a: 1, b: 2}];list.forEach(function(item, i) { // 第一个item是副本,第二个item是数组元素list[i] var item = item; // 此时item和list[i]指向的是同一地址,故两者完全一样 console.log(item === list[i]); // true // 此时item.a++ 亦即 list[i].a++ item.a ++; // list[i]的值已经改变 console.log(list[i]); // { a: 2, b: 2 }});console.log(list); // [ { a: 2, b: 2 } ]

登录后复制

那么为什么会产生这种情况呢?

由于js中对象属于引用类型,var item = item 这一步相当于把 list[i] 的地址赋值给了item,他们两个指向的都是原对象的地址,所以通过其中的一个去修改值时其实是修改他们指向的那个对象。例子中通过 item.a++ 方法改变了原对象的值,因此最后应该输出 [ { a: 2, b: 2 } ]。

相关推荐:

html怎样实现页面跳转时传递参数

php引用定义和引用传递参数实例用法详解

php函数基本语法与传递参数的用法实例详解

以上就是js函数的按值传递参数的详细内容,更多请关注【创想鸟】其它相关文章!

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

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

(0)
上一篇 2025年3月8日 19:00:51
下一篇 2025年3月3日 12:30:44

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

相关推荐

  • javascript函数的节流throttle与防抖debounce详解

    本文主要介绍了javascript函数的节流[throttle]与防抖[debounce ],详细的介绍了节流与防抖的原理和示例,具有一定的参考价值,有兴趣的可以了解一下,希望能帮助到大家。 防抖和节流 窗口的resize、scroll,输…

    编程技术 2025年3月8日
    200
  • PM2将Node.js的集群变得更加容易的实现方法

    本文主要介绍了详解如何使用pm2将node.js的集群变得更加容易,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。 介绍 众所周知,Node.js运行在Chrome的JavaScript运行时…

    2025年3月8日
    200
  • vuejs实现本地数据的筛选分页功能

    做项目需要一份根据本地数据的筛选分页功能,下面小编把vuejs实现本地数据的筛选分页功能的实现思路分享到脚本之家平台,需要的朋友可以参考下,希望能帮助到大家。 效果图: 项目需要:点击左侧进行数据筛选,实现自动分页,自动生成页数,点击自动跳…

    2025年3月8日
    200
  • Js判断H5上下滑动方向详解

    本文主要为大家分享一篇js判断h5上下滑动方向及滑动到顶部和底部判断的示例代码,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧,希望能帮助到大家。 向上滑动隐藏底部悬浮框,向下滑动显示悬浮框。使用pc端浏览器查看请把浏览器设…

    编程技术 2025年3月8日
    200
  • IWinter一个路由转控制器的Nodejs库详解

    本文主要介绍了详解iwinter 一个路由转控制器的 nodejs 库,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。 IWinter 是一个路由转控制器的 node 库,只解决一个问题:为了…

    编程技术 2025年3月8日
    200
  • js ajax同步请求造成浏览器假死的问题如何解决?

    本文主要为大家分享一篇解决js ajax同步请求造成浏览器假死的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧,希望能帮助到大家。 一、问题的起因 今天做一个需求遇到了这么个情况,就是用户个人中心有个功能,点击按钮,可…

    编程技术 2025年3月8日
    200
  • nodejs最新版安装npm的使用方法分享

    本文主要介绍了nodejs 最新版安装npm 的使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望能帮助到大家。 # 安装 nodejs 以下介绍的是命令行安装方法,读者也可以到nodejs官网 上下…

    2025年3月8日
    200
  • javascript将url解析为json格式的两种方法

    本篇文章主要介绍了javascript将url解析为json格式的两种方法,具有一定的参考和学习javascript的价值,对javascript感兴趣的小伙伴们可以参考一下本篇文章 本文介绍了javascript将url解析为json格式…

    2025年3月8日
    200
  • JS模拟超市简易收银台小程序代码解析

    本文通过实例代码给大家介绍了js模拟超市简易收银台小程序代码,非常不错,具有参考和学习js的价值,对js感兴趣的的朋友参考下吧 废话不多说了,直接给大家贴代码了,具体代码如下所示:   // 1.编写一个程序,计算增加后的工资。要求基本工资…

    编程技术 2025年3月8日
    200
  • JavaScript 完成注册页面表单校验的实例

    下面小编就为大家带来一篇javascript 完成注册页面表单校验的实例。小编觉得挺不错的,现在就分享js源码给大家,也给大家做个参考。对javascript感兴趣的一起跟随小编过来看看吧 1、步骤分析 第一步:确定事件(onsubmit)…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论