var a = 100;

function test(a){
a++;      //a(形参)是局部变量
console.log(a);
}
test(a);
console.log(a); //结果是 101 100;

函数的参数是属于函数内部变量,外部无法访问到,即使与外部变量同名;它们也是两个不同的变量

类似于:
var a = 100;
function test( ){
var a=100;   //a是局部变量
a++;
console.log(a);
}
test( );
console.log(a); //结果 101 100;
*****************************************************

当函数没有定义参数或者内部没有var 变量,内部的变量默认为全局变量;例如:

var a = 100;
function test( ){
a++ ;
console.log(a);
}
test( );
console.log(a);  //第一个返回101;第二个101;a是全局变量

******************************************************

当函数定义了参数,没有传实参时,形参默认为undefined:

var a = 100;
function test(a){
a++ ;
console.log(a);
}
test( );
console.log(a);    //第一个返回undefined;第二个100;

**************************************************************

但是如果是通过对象传递参数,函数内部对象属性值发生改变,外部被传递对象的属性值也会改变;

var a= {x:100};
function test (a){
  a.x++;   //修改参数对象a.x的值,函数外定义的a也将会被修改
console.log(a.x);
}
test(a);   
console.log(a.x);    // //第一个返回101;第二个101;

总结:通过值传递参数时
  在函数中调用的参数是函数参数(属于局部变量范畴).如果函数修改参数值,将不会改变外部被引用的实参值;
  通过对象传递参数时
  对象属性的变量是相当于一个指针,因此函数修改对象的属性值时,外部的对象属性值也会改变
这也是涉及到基本类型和引用类型的值;基本数据类型(undefined,null,boolean,Number)是按值访问的,所以局部变量与全局变量即使两个名字一样,也是两个不同的变量;

  总之 第一、函数参数是被当作变量对待的;第二、参数是按值传递的;第三、传递参数时要确定传递的数据类型;

对象属于引用类型,当变量是一个对象时,将这个变量赋给另一个变量时,相当于另一个变量也变为指针;两个变量都指向同一对象;所以在引用数据类型中,变量相当于一个指针; 
(注:javascript高级程序设计第四章 变量、作用域和内存 有详解介绍);

最新文章

  1. 《Linux常用命令》笔记
  2. 构建 iOS 风格移动 Web 应用程序的8款开发框架
  3. 应用框架的设计与实现——.NET平台(10 授权服务.CodeAccessSecurityAttribute)
  4. ios-消息弹框之UIAlertView, UIActionSheet以及UIAlertController小结
  5. grep:Binary file (standard input) matches
  6. ELK beats平台介绍
  7. android键盘锁定问题
  8. SOCKET网络编程细节问题1
  9. Markdown学习笔记(一) 基本的Markdown标签
  10. 重学C语言---01概述
  11. ab命令
  12. 【实验四】[bx]和loop的使用
  13. css @import 导入文件
  14. mysql创建table
  15. django .all .values .value_list 数据库获取数据
  16. web roadmap
  17. Problem UVA1572-Self-Assembly(拓扑排序)
  18. Selenium vs TestStudio,Selenium Grid vs F2Test
  19. 浮动ip cz
  20. Easyui1.3.4+IIS6.0+IE8兼容问题解决

热门文章

  1. [jvm] JVM体系结构
  2. 品味Zookeeper之选举及数据一致性_3
  3. 多线程 NSThread 的使用
  4. springcloud微服务 总结一
  5. 本地localhost:端口号(自己设置的Apache的端口号)打不开问题解决了!开心、哭泣
  6. css flex 使内容 水平居中 的方法...
  7. ul模拟select,位置,数据,是否可输入及输入提示效果都可作为参数直接传入
  8. UVA - 11584 DP 最少线段覆盖
  9. ActionHelper
  10. 【研究】Discuz<3.4任意文件删除漏洞