关于js 中函数的传参

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

时间: 2024-10-26 04:40:50

关于js 中函数的传参的相关文章

js中给正则传参、传递变量

js中验证字符串有时需要用到正则表达式,一般情况下直接写正则进行验证就行. 但是遇到需要把部分正则作为参数传递就麻烦一点,需要用到RegExp()对象. <script type="text/javascript"> window.onload = function () { var str = "123456789"; var pattern = "\^\[0-9\]"; var reg = new RegExp(pattern +

关于js中onclick字符串传参问题

规则: 外变是“”,里面就是‘’外边是‘’,里边就是“” 示例: var a="111"; var html="<a onclick='selecthoods(\" "+a + "\"); >AAA</a>"; 注意点:需要用转义字符

JS XMLHttpRequest.upload.addEventListener 传参,回调

JS 回调函数,传参的办法. function uploadFile(t) { var fd = new FormData(); fd.append("_netLogo", document.getElementById('_netLogo').files[0]); var xhr = new XMLHttpRequest(); // 原来 xhr.upload.addEventListener("progress", uploadProgress, false);

对JS中函数的理解

函数本质就是功能的集合 JS中函数是对象,因此,函数名实际上仅仅是一个指向函数对象的指针,不会与某个函数绑定,所以,JS中没有重载(重载就是通过传递不同类型的参数,使两个相同函数名的函数执行不同的功能) var fn=function(a){return a+100;} fn=function(a){return a+200;} alert(fn(100)); //300 要访问函数的引用(指针)而不是执行函数时,必须去掉圆括号,加上圆括号表示访问函数执行后的结果 函数体内部的语句在执行时,一旦

函数间传参实例(前一个函数产生的数据传到给后一个函数应用)

场景描述:A函数通过一系列的请求与执行,创建并产生订单 B函数获取该订单,然后查询该订单,获取订单信息 本次实例的关键就是,A产生的订单号,传给B,实现函数间传参 代码如下: import requests # 先导入包,这是必须的 import json ordid="190416111501017074" #A函数产生的订单号,具体过程不在此书写 #ordid为定义的变量,需要写到下面函数的括号中,可理解为把变量ordid传到函数search中 def search(ordid):

js中函数参数值传递和引用传递

js中函数参数值传递和引用传递:在阅读本章节之前建议参阅一下两章节:1.值类型可以参阅javascript的值类型一章节.2.引用类型可以参阅javascript的引用类型一章节.一.函数传递值类型:代码实例如下: function addNum(num) { num+=10; return num; } var num=10; var result=addNum(num); console.log(num); console.log(result); 以上代码的弹出值分别为:10和20,下面进

JS中函数声明与函数表达式的不同

Js中的函数声明是指下面的形式: function functionName(){ } 这样的方式来声明一个函数,而函数表达式则是类似表达式那样来声明一个函数,如: var functionName = function(){ } 可能很多朋友在看到这两一种写法时会产生疑惑,这两种写法差不多,在应用中貌似也都是可行的,那他们有什么差别呢? 事实上,js的解析器对函数声明与函数表达式并不是一视同仁地对待的.对于函数声明,js解析器会优先读取,确保在所有代码执行之前声明已经被解析,而函数表达式,如同

C#中ref引用传参怎么用

protected void Page_Load(object sender, EventArgs e) { int value = 0;//初始值 Test(ref value); Response.Write(value.ToString());//值被改变,结果是9999 Response.End(); } protected void Test(ref int value) { value = 999; }C#中ref引用传参怎么用

JS中函数的地方方式

JS中函数是特殊的对象,可以拥有自己的属性和方法,属性被定义为局部变量,这样可以有效地防止变量的污染,方法被定义为闭包(定义在函数内部的函数).JS中函数的实参和形参个数都可以不固定,通过arguments(实参对象)函数属性来调用,在函数内部arguments.length表示函数实参的个数,而arguments.callee.length表示函数的形参的个数.prototype称为原型属性, 1.通过函数直接量表达式定义(适合于只要使用一次的场景,在JS中使用最多的是回调函数): funct