JS中函数的参数是按值传递还是按引用传递

JavaScript019

JS中函数的参数是按值传递还是按引用传递,第1张

JS求值策略有诸多争议和不同版本。对于这个问题的答案:“JS中基本类型是按值传递的,对象类型是按共享传递的。”共享传递解释为:(callbysharing,也叫按对象传递、按对象共享传递)。最早由BarbaraLiskov.在1974年的GLU语言中提出。该求值策略被用于Python、Java、Ruby、JS等多种语言。你可以自己写个demo运行下结果就知道。var a = 1function foo(x) {x = 2}foo(a)console.log(a)// 仍为1, 未受x = 2赋值所影响var obj = {x : 1}function foo(o) {o.x = 3}foo(obj)console.log(obj.x)// 3, 被修改了!

把参数写在括号里面 就可以了

var  a=1

var b=2

var c= myaddfun(a,b)

alert(c)

function my addfun(a,b){  //注意 这里的 a 和b 

                            // 和上表面的a和b 无关 可以用任何合法的变量名 如C和D

    return a+b

}

functions myaddfun(c,d){ //  用c和d也是一样, 只跟次序有关系

    return c+d 

}

无办法直接做到这一点,不过可以采用其他方法实现,例如:首先,定义被调用函数的参数为va_list类型,同时在调用函数中将可变长参数列表转换为va_list,这样就可以进行变长参数的传递了。看如下所示:

void subfunc (char *fmt, va_list argp)

{

...

arg = va_arg (fmt, argp)/* 从argp中逐一取出所要的参数 */

...

}

void mainfunc (char *fmt, ...)

{

va_list argp

va_start (argp, fmt)/* 将可变长参数转换为va_list */

subfunc (fmt, argp)/* 将va_list传递给子函数 */

va_end (argp)

...

}

这样就OK了!