600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 基本类型和引用类型的值 函数的传递参数

基本类型和引用类型的值 函数的传递参数

时间:2023-06-29 01:41:10

相关推荐

基本类型和引用类型的值  函数的传递参数

ECMAScript中函数的传参都是按值传递的。

不管是传基本类型的值还是引用类型的值都是按值传递,访问变量则分按值和按引用两种方式。

向参数传递基本类型的值

被传递的值会被复制(对应文章《基本类型和引用类型的值--复制变量值》)给函数内部的一个局部变量。(即命名参数,也就是argument对象的一个元素)

function addTen(num){num += 10;return num;};var count = 20;var result = addTen(count);alter(count); //20,没有变化alter(result); //30复制代码

函数addTen的一个参数num,实际上是函数addTen内部的一个局部变量,仅仅供函数内部使用,count只是将其值复制了一份给了局部变量num。两个变量互不影响。

向参数传递引用类型的值

被传递的值会被复制(对应文章《基本类型和引用类型的值--复制变量值》)给函数内部的一个局部变量,(即命名参数,也就是argument对象的一个元素)和传递基本类型的值一样。不同的是这里的值应该是指引用类型的值对应的内存地址。

function setName(obj){obj.name = 'Zeng';};var preson = "John";setName(preson);alter(preson.name); //"Zeng"复制代码

这样一来,obj和preson引用的是同一个对象。改变obj,就会改变preson,这两个对象指向的对象在堆内存中只有一个。

为什么不是按引用传递的呢?

function setName(obj){obj.name = 'Zeng';obj = new Object(); //一个新的对象重新赋值给obj,这样obj和preson引用的就不是同一个对象了。此时的obj和preson互不影响。obj.name = 'Sam';};var preson = new Object();setName(preson);alert(preson); //Zeng复制代码

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。