码迷,mamicode.com
首页 > 编程语言 > 详细

javascript函数传参

时间:2015-08-25 12:24:26      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:javascript按值传递

javascript中函数的传参方式是比较奇葩的;

javascript并没有按引用传递参数的方式,不严格的说全部为按值传递,但是对于引用类型来说,个人觉得这个像是共享传递

基本类型作为参数传入函数(只是将值复制给函数内部的一个局部变量)

var a = 10;

function foo(a) {

  a = 20;

  return a;

}

console.log(foo(a));  // 20

console.log(a);   // 10

对于基本类型只是简单的将值赋给函数内部的一个局部变量,所以在局部作用域中修改的值并不会在全局变量中反映出来,说到这里我们在看引用类型,很多人会对下一代码产生误解

var obj = {

  name: "zp"

};

function foo(obj) {

   obj.name = "zpy";

   return obj;

}

foo(obj); 

console.log(obj.name);   // "zpy"

很多人认为这个例子不就是局部作用域中修改的值并且在全局变量中反映出来(从而得到说js中有按引用传递的结论),但是事实上并不是这样,在javascript中对象名也可以理解为一个指针,在讲引用类型作为参传入函数时,同时会将地址同时复制给函数内部的局部变量,这样也就是说,此时函数的局部变量与全局变量obj指向堆内存中的同一个对象,

看下面的一段代码就可以说明出,js中并没有按引用传递

var obj = {

  name: "zp"

};

function foo(obj) {

  obj = new Object();

  obj.name = "zpy";

  return obj;

}

foo(obj); 

console.log(obj.name);   // "zp"

obj = new Object()这句话讲局部变量中的地址名给更改,局部变量在函数执行完后就会被销毁,所以可以印证js中并没有按引用传递


本文出自 “zp1996” 博客,请务必保留此出处http://9865481.blog.51cto.com/9855481/1687693

javascript函数传参

标签:javascript按值传递

原文地址:http://9865481.blog.51cto.com/9855481/1687693

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!