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高级程序设计第四章 变量、作用域和内存 有详解介绍);

关于js 中函数的参数的更多相关文章

  1. js中函数的参数为函数的情况即回调函数

    js中函数的参数可以是数组对象也可以是函数,当参数为函数时我们叫做回调函数 //定义回调函数function B() { console.log("函数B")setTimeout( ...

  2. JS中函数参数和函数返回值的理解

    函数本质就是功能的集合 JS中函数是对象,因此,函数名实际上仅仅是一个指向函数对象的指针,不会与某个函数绑定,所以,JS中没有重载(重载就是通过传递不同类型的参数,使两个相同函数名的函数执行不同的功能 ...

  3. JS中URL编码参数(UrlEncode)

    JS中URL编码参数(UrlEncode) 网上有很多文字作品写涉及在JS中呈现类似UrlEncode功能时都是自定义参数来呈现,其实JS中本身就有那样的参数.参数parameter由于用类似URL的 ...

  4. 关于js中函数的调用问题

    js中函数的调用方法 1.直接调用 函数名(参数): 2.通过指向函数的变量去调用 例如: var myval = 函数名: 此刻 myval是指向函数的一个指针: myval(实际参数):此刻调用的 ...

  5. js中函数传参的情况

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  6. 对JS中函数的理解

    函数本质就是功能的集合 JS中函数是对象,因此,函数名实际上仅仅是一个指向函数对象的指针,不会与某个函数绑定,所以,JS中没有重载(重载就是通过传递不同类型的参数,使两个相同函数名的函数执行不同的功能 ...

  7. 如何理解javaSript中函数的参数是按值传递

    本文是我基于红宝书<Javascript高级程序设计>中的第四章,4.1.3传递参数小节P70,进一步理解javaSript中函数的参数,当传递的参数是对象时的传递方式. (结合资料的个人 ...

  8. 【2017-06-27】Js中获取地址栏参数、Js中字符串截取

    一.Js中获取地址栏参数 //从地址栏获取想要的参数 function GetQueryString(name) { var reg = new RegExp("(^|&)" ...

  9. JS中函数void()

    <a href="javascript:void(0)">hello</a>/* * JS中函数void()的运用大体是这种新式; * void()是运算符 ...

随机推荐

  1. 在Pd中取消Code Name 同步

    以前记得现在忘记了,好不容易找回来,记住备忘吧.  

  2. @ApiParam @PathVariable @RequestParam三者区别

    转载:https://www.cnblogs.com/xu-lei/p/7803062.html @ApiParam @PathVariable @RequestParam三者区别 1.@ApiPar ...

  3. 单选框radio总结(获取值、设置默认选中值、样式)

    单选框 radio <div class="radio-inline"> <input type="radio" name="kil ...

  4. Hibernate学习笔记(二)—— 实体规则&对象的状态&一级缓存

    一.持久化类 1.1 什么是持久化类? Hibernate是持久层的ORM映射框架,专注于数据的持久化工作.所谓的持久化,就是将内存中的数据永久存储到关系型数据库中.那么知道了什么是持久化,什么又是持 ...

  5. Foremost恢复Linux中已删除的文件

    Foremost 我们只能在Linux中恢复已删除的文件,只要这些扇区在硬盘上没有被覆盖. 首先安装 要在CentOS上安装Foremost,我们将从官方网页下载并安装最前面的rpm.打开终端并执行以 ...

  6. ubuntu画面延迟问题解决

    新配的电脑,安装ubuntu16.04以后,出现画面延迟的问题,尤其浏览网页的时候画面十分卡顿.用free命令查看过可用内存6.多G,经过询问大概是显卡问题,然后在https://ubuntuforu ...

  7. 【算法笔记】B1014 福尔摩斯的约会

    1014 福尔摩斯的约会 (20 分) 大侦探福尔摩斯接到一张奇怪的字条:我们约会吧! 3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hy ...

  8. P4890 Never·island

    传送门 考虑把总区间长度减去最多能减少的区间长度 把所有区间离散化,对每一小段计算贡献 分类讨论一波,对于边界 $i,i+1$ ,设它们之间距离 $d$,$i$ 属于 $x$ 考察队的边界,$i+1$ ...

  9. UVA - 11996 可持久化Treap 维护Hash Ver.2

    这回总算是过了.. 4600ms+,服务器抖一抖又没了 对于极端卡时间的情况还是考虑屈服于Splay吧 #include<iostream> #include<algorithm&g ...

  10. BZOJ - 2457 思維+貪心

    //為什麼我的Chrome OS更新後變成強制繁體了?? 題目要求使用最少的雙端隊列來維護一個單調非降序列 先來看下規律 首先,val肯定是單調非降的,在相等val範圍內的id可以xjb亂放不影響 其 ...