美文网首页
函数参数按值传递

函数参数按值传递

作者: 三省吾身_9862 | 来源:发表于2019-12-04 14:16 被阅读0次

对于函数的参数都是按值传递的理解,常常会使人难以理解,特别参数是对象的时候,总是看起来像是引用传递;下面用几个例子来解释:

一、函数参数的几种数据类型:

1、 参数是基本数据类型,这个按值传递,比较容易理解。


// 参数是基本数据类型,这个按值传递,比较容易理解

let num = 1;

function changeNum(arg1) {

  ++arg1;

}

changeNum(num);

console.log(num); // 打印出1

2、参数是对象,乍一看以为是引用传递


let person = {

  name: 'xl',

  skill: ['js', 'css', 'html']

};

function changeObj(obj) {

  obj.name = 'otherName';

}

changeObj(person);

console.log(person); // {name: 'otherName', skill: ['js', 'css', 'html']}

3、参数是对象的另一种情况,让人又摸不到头脑了


let person = {

  name: 'xl',

  skill: ['js', 'css', 'html']

};

function changeObj(obj) {

  obj = {

    name: 'otherName'

  };

}

changeObj(person);

console.log(person); // {name: 'xl', skill: ['js', 'css', 'html']}

// 如果参数是按引用传递的,那么执行changeObj(person) 的时候:

person  = {

  name: 'otherName'

};

// person岂不是变成另一个对象了,为什么实际又是原对象呢?

4、参数是函数(对象)的情况


window.color = 'blue';

let obj = {

  color: 'red',

  sayColor() {

    console.log(this.color);

  }

};

function fn(callback) {

  callback();

}

fn(obj.sayColor); // 'blue'

// 上面的运行结果,真的是超乎想象,打印出的竟然是'blue'

二、函数参数传递的理解

1、到底函数的参数是怎么传递的呢?下面是一种看起来比较合理的猜想


function fn(arg1, arg2) {

  // 在函数里面,一开始就执行:申明并赋值操作

  let arg1 = arguments[0],

      arg2 = arguments[1];

}

三、验证猜想 :

1、参数是对象的另一种情况,让人又摸不到头脑了


let person = {

  name: 'xl',

  skill: ['js', 'css', 'html']

}

function changeObj(obj) {

  let obj = argument[0];

  // 让obj重新指向另一个对象

  obj = {

    name: 'otherName'

  };

}

changeObj(person);

// 实际函数执行分析:

function changeObj(obj) {

  let obj = person;

  obj = {

    name: 'otherName'

  };

}

// 最后person没有变化,合理

2、参数是函数(对象)的情况


window.color = 'blue';

let obj = {

  color: 'red',

  sayColor() {

    console.log(this.color);

  }

};

function fn(callback) {

  callback();

}

fn(obj.sayColor); // 'blue'

// 实际函数执行分析:

function fn(callback) {

  let callback = function () {

    console.log(this.color);

  }

  callback();

  // 函数中的this指向widow,因此this.color是blue

}

相关文章

  • 再学JS--函数参数传递类型

    JavaScript的函数参数传递分为按值传递、按引用传递以及按共享传递。 按值传递 什么是按值传递? 把函数外部...

  • 2019-06-26

    深入理解JavaScript 参数按值传递 定义:ECMAScript中所有函数的参数都是按值传递的。 值传递:函...

  • golang学习笔记9:函数参数与返回值

    按值传递和按引用传递 Go 默认使用按值传递来传递参数,也就是传递参数的副本。函数接收参数副本之后,在使用变量的过...

  • golang笔记之函数

    函数参数传递类型 1.按值传递:Go 默认使用按值传递来传递参数,也就是传递参数的副本。 2.引用传递:如果你希望...

  • 值传递or引用传递

    javascript都是按值传递 javascript的函数的参数传递,传递的都是值,参数是 Object 类型的...

  • PHP(4)函数

    一、函数参数 按值传递参数,函数内部的改变不会影响传进去的变量 按引用传递参数,需要在参数前面加上 & 符号 默认...

  • 数据结构与算法 javascript

    基础概念 javascript中,函数的参数传递方式都是按值传递,没有按引用传递的参数。但是javascript中...

  • 第七章 函数(2)函数参数和按值传递

    (二)函数参数和按值传递 1.形参,实参,参数和参量 函数参数的传递中,用于接收传递值的变量被称为形参,传递给函...

  • 面向对象——方法的值传递和引用传递

    带参函数 方法的值传递 按值传递是什么 指的是在方法调用时,传递的参数是按值的拷贝传递 按值传递重要特点:传递的是...

  • 带你深入理解传递参数

    传递参数 ECMAScript中所有函数的参数都是按值传递的。也就是说,把函数外部的值复制给函数内部的参数,就和把...

网友评论

      本文标题:函数参数按值传递

      本文链接:https://www.haomeiwen.com/subject/vlqlgctx.html