JavaScript 函数参数是传值(byVal)还是传址(byRef) 分享

JavaScript 中函数参数的传递方式既有值传递(by value),也有引用传递(by reference)。

值传递

函数参数以基本数据类型(如Number、String、Boolean等)为例,是以值传递的方式进行的。值传递表示将实际传递给函数的参数值(即实参)复制一份,传递给函数中对应的参数(即形参),函数中对参数值的修改不会影响到实参的值

下面的示例说明了这一点:

function valuePass(a) {
  a = 2;
  console.log(a); // 输出2
}

let b = 1;
valuePass(b);
console.log(b); // 输出1

在这个例子中,变量 b 的值为 1,被作为参数传递给函数 valuePass 中的形参 a。在函数内部将 a 的值改为 2 后,输出的值为 2。但是当函数执行完成后,变量 b 的值仍然为 1,说明函数 valuePass 对形参 a 的修改并没有影响到实参 b 的值。

引用传递

函数参数以对象(Object)为例,则是通过引用传递的方式进行的。引用传递表示传递的是实参的引用(即实参本身在内存中的地址),函数中对参数引用值的修改会直接影响到实参的值。

下面的示例说明了这一点:

function referencePass(obj) {
  obj.prop = 'new value';
  console.log(obj.prop); // 输出new value
}

let obj = {};
obj.prop = 'old value';
referencePass(obj);
console.log(obj.prop); // 输出new value

在这个示例中,变量 obj 存储了一个包含属性 prop 的空对象,并被作为参数传递给函数 referencePass 中的形参 obj。在函数内部修改了 obj.prop 的值为 'new value',并通过 console.log 输出了修改后的值。而在函数执行完成后,输出变量 obj.prop 的值也是 'new value',说明函数 referencePass 对形参 obj 的修改直接影响到了实参 obj.prop 的值。

需要注意的是,引用传递存在风险,因为在函数内部可能会意外或者无意间地修改实参的值,导致不可预测的结果产生,因此建议在使用时慎重考虑。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript 函数参数是传值(byVal)还是传址(byRef) 分享 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • js实现表单检测及表单提示的方法

    当我们在网站中设计表单时,为了确保用户的信息填写的准确性,我们需要用JavaScript来实现表单检测及表单提示。下面我将详细介绍JS实现表单检测及表单提示的方法,包括表单验证、错误提示、表单提交等重要细节。同时提供两条示例说明进行阐述。 表单验证 表单验证是验证用户提交表单数据的过程,用于确保表单数据的安全性和正确性。表单验证规则可以针对表单字段的数据类型…

    JavaScript 2023年6月10日
    00
  • 有关js的变量作用域和this指针的讨论

    标题:有关JS的变量作用域和this指针的讨论 1. 变量作用域 1.1 作用域是什么 在JS中,作用域可以理解为变量的有效范围。JS支持两种作用域:全局作用域和函数作用域。 全局作用域是指整个JS文件,其内定义的变量可以被文件中任何一个函数所使用。 函数作用域是指只在函数体内部(包括函数体内嵌套的函数中)定义的变量。这些变量只在函数体内及其内部的函数中有效…

    JavaScript 2023年5月27日
    00
  • JavaScript实现的前端AES加密解密功能【基于CryptoJS】

    标题: JavaScript实现的前端AES加密解密功能【基于CryptoJS】 正文: JavaScript实现的前端AES加密解密功能主要解决的问题是数据在前端页面上进行加密和传输,保证数据的安全性。基于CryptoJS实现前端AES加密解密功能的攻略如下: 1. 引入CryptoJS库 在HTML文件中引入CryptoJS库文件,可以通过CDN方式引入…

    JavaScript 2023年5月20日
    00
  • JavaScript 三种创建对象的方法

    我来详细讲解 JavaScript 三种创建对象的方法。 1. 工厂函数创建对象 通过工厂函数可以返回一个对象。我们可以在函数内部定义一个对象,然后向这个对象添加各种属性和方法,最后完整的返回这个对象。这种方法的优点,可以根据不同的参数,返回多个相似的对象;缺点是不能识别每个具有同样属性和方法的对象类型。 以下是一个例子: function createPe…

    JavaScript 2023年5月27日
    00
  • JavaScript面向对象程序设计教程

    JavaScript面向对象程序设计教程攻略 什么是面向对象? 面向对象是一种编程范式,它将数据和行为组织在一起,描述真实世界中的事物,并允许程序员定义这些事物的相关操作。在JavaScript中,面向对象编程可以通过对象的创建来实现。 JavaScript中的面向对象 JavaScript是一种基于原型的面向对象语言。它通过原型链来实现继承和数据共享,这种…

    JavaScript 2023年5月27日
    00
  • js split函数用法总结(从入门到精通)

    JS split函数用法总结(从入门到精通) 什么是split函数 split()函数是JavaScript中字符串对象的一个方法,用于将一个字符串根据指定的分隔符分割成一个由多个子字符串组成的数组。 split函数的基本语法 stringObject.split(separator, limit) 参数说明: separator:必需。一个字符串或正则表达…

    JavaScript 2023年5月27日
    00
  • javascript强大的日期函数代码分享

    JavaScript强大的日期函数代码分享 日期和时间是我们在开发Web应用中最常用到的一个组件,JavaScript提供了丰富的API让我们更加便捷地处理日期和时间。下面将分享一些常用的日期函数及其代码实现。 Date对象 JavaScript中内置的Date对象提供了一些常用的处理日期和时间的方法,其中比较常用的有以下几个方法: getFullYear(…

    JavaScript 2023年5月27日
    00
  • 使用Chrome浏览器调试AngularJS应用的方法

    使用Chrome浏览器调试AngularJS应用的方法 AngularJS是一种流行的JavaScript框架,它是一种用于单页面应用程序(SPA)的框架。使用Chrome浏览器调试AngularJS应用程序是一项必需的技能,下面是详细说明: 步骤1:启用Debug模式 将ng-app指令添加到AngularJS应用程序的HTML标记时,请确保正确设置了de…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部