资讯专栏INFORMATION COLUMN

笔记:js参数传递问题

Kross / 366人阅读

摘要:正题中所有函数的参数都是按值传递的。访问变量有按值和按引用两种方式,而参数只能按值传递。基本类型参数传递传给函数的是数值的一个复制,函数中对其的修改外部不可见。因为用新引用覆盖在外部不可见,因为函数只是拿到了引用并没有权力更改引用。

前言
var a = [1],b=[1];
a==b;     //fasle
var c = b;
c[0]=2;
b         //[2]
c = [3];
b         //[2]

解释:b对c说,我同意你跟我共用一个内存地址,你可以在我的内存地址内,修改局部成员,但是你要连我的家都给挪走,对不起 你自己走。。。

正题

ECMAScript 中所有函数的参数都是按值传递的。访问变量有按值和按引用两种方式,而参数只能按值传递。
  

基本类型参数传递:传给函数的是数值的一个复制,函数中对其的修改外部不可见。

var a = 1;
var b = 2;
function change(a, b) {
    var c = a;
    a = b;
    b = c;
    console.log(a);    //2
    console.log(b);    //1
}
change(a, b);
console.log(a);    //1
console.log(b);    //2

引用类型参数传递:传给函数的是数值的一个引用,函数中对其属性的修改外部可见,但用新引用覆盖其则在外部不可见

var a = [1, 2, 3];
var b = [5, 6];
function change(a,b) {
  a[0] = 4;    //对其属性的修改外部可见 
  var c = a;
  a = b;      //用新引用覆盖
  b = c;
  console.log(a);  //"5,6"        
  console.log(b);  //"4,2,3"
}
change(a,b);
console.log(a);    //"4,2,3"
console.log(b);    //"5,6"

  a,b是change函数中的变量,在调用函数时传递了a,b的引用赋给了这两个变量,但是并不能改变全局中的a,b。因为用新引用覆盖在外部不可见,因为函数只是拿到了引用 并没有权力更改引用。

var a = [1, 2, 3];
var b = [5, 6];
function change() {
  var c = a;
  a[0] = 4;    //对其属性的修改外部可见 
  a = b;      //用新引用覆盖
  b = c;
}
change(a,b);
console.log(a);  //"5,6" 
console.log(b);  //"4,2,3"

  因为js没有块级作用域,所以它在change里找不到变量a,b就会自觉的到上层去找,所以这里的a,b是全局变量的引用。
欢迎搜索微信公众号:一线码农
或扫码关注:

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/97349.html

相关文章

  • JavaScript异步编程解决方案笔记

    摘要:异步编程解决方案笔记最近读了朴灵老师的深入浅出中异步编程一章,并参考了一些有趣的文章。另外回调函数中的也失去了意义,这会使我们的程序必须依赖于副作用。 JavaScript 异步编程解决方案笔记 最近读了朴灵老师的《深入浅出NodeJS》中《异步编程》一章,并参考了一些有趣的文章。在此做个笔记,记录并巩固学到的知识。 JavaScript异步编程的两个核心难点 异步I/O、事件驱动使得...

    dmlllll 评论0 收藏0
  • JavaScript框架学习笔记(一)

    摘要:基本的学习思路是跟着框架设计这本书,甚至可以说是这本书的读书笔记。也参考很多网上解读的博客和学习资料。当然,最重要的资料还是框架的源代码。后来由于开发者反对,新兴的框架都在命名空间上构建。 JavaScript框架学习笔记(一) 我为什么要学习框架 更深入的理解工具,以后用起来更顺手而且也能做一定的工具取舍,学习理解新工具也就更快, 对提升js水平也很有帮助,框架有很多解决坑的经典思...

    Shonim 评论0 收藏0
  • React学习笔记2:React官方CommentBox实践

    摘要:浏览器看效果效果显示效果就是瞎比比我不听瞎比比解析后的文本直接被显示在页面上,并没有被浏览器解析,这是为了防止被攻击而作的保护措施。 新搭建的个人博客,本文地址:React学习笔记2:React官方CommentBox实践所有的操作是继续上一个学习笔记,参考的是React官方的CommentBox,不过不是100%按照其实现。参考:https://facebook.github.io/...

    VPointer 评论0 收藏0
  • [JavaScript 学习笔记] 2. 继承

    摘要:第二个问题是在创建子类型的实例时,不能向超类型的构造函数中传递参数。实际上,应该说是没有办法在不影响所有对象实例的情况下,给炒类型的构造函数传递参数。借用构造函数伪造对象或经典继承即在子类型构造函数的内部调用超类型构造函数。 继承 许多 OO 语言支持两种继承方式:接口继承和实现继承。接口继承只继承方法签名,而实现继承则继承实际的方法。如前所述,由于函数没有签名,在 ECMAScri...

    leeon 评论0 收藏0

发表评论

0条评论

Kross

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<