笔记:js参数传递问题

前言

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

解释:b对c说,我赞成你跟我共用一个内存地址,你能够在个人内存地址内,修改局部成员,可是你要连个人家都给挪走,对不起 你本身走。。。微信

正题

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

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

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

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

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是全局变量的引用。
欢迎搜索微信公众号:一线码农
或扫码关注:
图片描述ip

相关文章
相关标签/搜索