在函数内部的代码中,当某些值不能确定的时候,可以通过函数的参数从外部接收进来一个函数可以通过传人不同的参数来完成不同的操作。
函数的参数分为形参和实参。在声明函数时,可以在函数名称后面的小括号中添加一些参数,这些参数被称为形参。当函数调用的时候,同样也需要传递相应的参数,这些参数称为实参。函数的形参是形式上的参数,因为当丽数声明的时候,这个函数还没有被调用,这些参数具体会传过来什么样的值是不确定的。而实参是实际上的参数,在函数被调用的时候它的值就被确定下来了。
函数形参和实参的具体语法形式如下。
function 函数名(形参1,形参2,...) //函数声明的小括号里的是形参
//函数体代码
}
函数名(实参1,实参2,...); //函数调用的小括号里的是实参
一个函数的参数可以有多个,使用逗号分隔即可,也可以没有参数。下面我们通过代码演示函数参数的具体使用。
function cook(arg) {
console.log(arg);
}
cook('potato');
在上述代码中,arg是函数的形参,它类似于一个变量,当函数调用的时候,它的值就是调用时传入的值,即 potato。
接下来我们再演示如何利用函数求任意两个数之和,具体代码如下。
function getSum(numl,num2) {
console.log(numl + num2);
}
getSum(1,3);
//输出结果:4
getSum(3,8);
//输出结果:11
在上述代码中,第4行代码在调用函数时传入了两个实参,分别是1和3,这两个实参对应了函数中的形参num1和num2,然后在第2行对这两个值进行了相加,因此得到的输出结果为4。同理,第5行代码在调用函数时传入了3和8两个实参,因此结果为11。
多学一招:
函数的形参可以看做是一个变量,当我们把一个值类型变量作为参数传给函数的形参时,其实是把变量在栈空间里的值复制了一份给形参,那么在方法内部对形参做任何修改,都不会影响到的外部变量。
function fn(a) {
a++;
console.log(a);
}
var x = 10;
fn(x);
console.log(x);
当我们把引用类型变量传给形参时,其实是把变量在栈空间里保存的堆地址复制给了形参,形参和实参其实保存的是同一个堆地址,所以操作的是同一个对象。
function Person(name) {
this.name = name;
}
function f1(x) { // x = p
console.log(x.name); // 2. 这个输出什么 ?
x.name = "张学友";
console.log(x.name); // 3. 这个输出什么 ?
}
var p = new Person("刘德华");
console.log(p.name); // 1. 这个输出什么 ?
f1(p);
console.log(p.name); // 4. 这个输出什么 ?