形参:定义函数时候的参数,用来接受调用的时候传过来的实际参数 。
实参:在调用函数时,传给函数的值。
function func(a,b) {
console.log(a, b);
}
func(1,2);
// a,b 就是形参, 1,2 就是实参
一直很疑惑的是,改变形参的值,是否能够影响实参。
先出结论:
如果是单纯的值传递: 形参的赋值,不会影响到实参。但是,如果是引用传递,那么变形参的值,相当于改变了引用,会改变实参的值 。
举个例子:
var objName = {
a = 'isa'
};
function func ( arg ) {
arg.a = 'isb';
}
func(objName);
console.log(objName.a) // isb;会被改变
另外 还有一个经常 遇到的面试题:
形参的值跟函数里面的定义的变量同名,如何区分值。
举例说明:
function myfunc(a){
alert(a); //hello
var a = a+'world';
var b = a;
alert(a); //helloworld
alert(b); //helloworld
}
myfunc("hello");
由于“变量声明提升”,当执行到第一个alert(a)时,形参a已经存在。局部变量a只声明而未赋值,内存中还未创建局部变量a。这时候alert(a),a 表示形参,所以输出“hello”。
执行var a = a+‘world’;时,右边的a是形参,左边的a是局部变量。这两个a互不干扰。但这一句执行完成后,局部变量a已经覆盖了形参a。所以后面的b=a时,a为局部变量。
参考链接:https://blog.csdn.net/liu_shi_jun/article/details/51967436