新浦京娱乐场官网-301net-新浦京娱乐www.301net
做最好的网站

在《JavaScript高级程序设计》第三版 4.1.3

JavaScript 深远之参数按值传递

2017/05/23 · JavaScript · 参数

原稿出处: 冴羽   

定义

在《JavaScript高端程序设计》第三版 4.1.3,讲到传递参数:

ECMAScript中全体函数的参数都以按值传递的。

怎么是按值传递呢?

相当于说,把函数外界的值复制给函数内部的参数,就和把值从二个变量复制到另一个变量同样。

按值传递

举个简单的事例:

var value = 1; function foo(v) { v = 2; console.log(v); //2 } foo(value); console.log(value) // 1

1
2
3
4
5
6
7
var value = 1;
function foo(v) {
    v = 2;
    console.log(v); //2
}
foo(value);
console.log(value) // 1

很好驾驭,当传递 value 到函数 foo 中,相当于拷贝了后生可畏份 value,假若拷贝的那份叫 _value,函数中期维改革的都以 _value 的值,而不会影响原来的 value 值。

援用传递

拷贝即使很好掌握,不过当班值日是一个头晕目眩的数据结构的时候,拷贝就能够产生质量上的难点。

进而还应该有另生龙活虎种传递情势叫做按援引传递。

所谓按征引传递,正是传递对象的引用,函数内部对参数的任何变动都会影响该对象的值,因为两岸援引的是同叁个指标。

比方:

var obj = { value: 1 }; function foo(o) { o.value = 2; console.log(o.value); //2 } foo(obj); console.log(obj.value) // 2

1
2
3
4
5
6
7
8
9
var obj = {
    value: 1
};
function foo(o) {
    o.value = 2;
    console.log(o.value); //2
}
foo(obj);
console.log(obj.value) // 2

哎呀,不对啊,连大家的红宝书都说了 ECMAScript 中有所函数的参数都以按值传递的,那怎能按援用传递成功吗?

而那到底是还是不是援用传递呢?

其三种传递方式

不急,让大家再看个例子:

var obj = { value: 1 }; function foo(o) { o = 2; console.log(o); //2 } foo(obj); console.log(obj.value) // 1

1
2
3
4
5
6
7
8
9
var obj = {
    value: 1
};
function foo(o) {
    o = 2;
    console.log(o); //2
}
foo(obj);
console.log(obj.value) // 1

固然 JavaScript 选取的是引用传递,外层的值也会被改造呐,那怎么又没被改吧?所以的确不是引用传递吗?

那就要讲到其实还会有第三种传递形式,叫按分享传递。

而分享传递是指,在传递对象的时候,传递对象的援引的别本。

在意: 按引用传递是传递对象的援用,而按分享传递是传递对象的援用的别本!

为此修改 o.value,能够通过引用找到原值,可是一贯改变o,并不会矫正原值。所以第一个和第多个例子其实都是按分享传递。

提起底,你能够那样精通:

参数假设是骨干项目是按值传递,假若是援用类型按分享传递。

而是因为拷贝别本也是后生可畏种值的正片,所以在海拔中也平素以为是按值传递了。

据此,高程,什么人叫你是红宝书嘞!

深切体系

JavaScript深切种类目录地址:。

JavaScript深刻类别估算写十九篇左右,目的在于帮大家捋顺JavaScript底层知识,器重教学如原型、功用域、实行上下文、变量对象、this、闭包、按值传递、call、apply、bind、new、世襲等困难概念。

若果有错误大概不稳重的地点,请必需赋予指正,相当多谢。如若喜欢也许有所启迪,招待star,对作者也是生龙活虎种驱策。

本系列:

  1. JavaScirpt 深刻之从原型到原型链
  2. JavaScript 深刻之词法功用域和动态成效域
  3. JavaScript 深远之实践上下文栈
  4. JavaScript 浓重之变量对象
  5. JavaScript 浓郁之功力域链
  6. JavaScript 深刻之从 ECMAScript 标准解读 this
  7. JavaScript 深刻之实践上下文
  8. JavaScript 深远之闭包

    1 赞 收藏 评论

图片 1

本文由新浦京娱乐场官网-301net-新浦京娱乐www.301net发布于www.301net,转载请注明出处:在《JavaScript高级程序设计》第三版 4.1.3

您可能还会对下面的文章感兴趣: