参数概念
函数运行的时候,有时需要提供外部数据,不同的外部数据会得到不同的结果,这种外部数据就叫参数。
参数可以分为:
- 形参:在定义函数时,声明的参数变量仅在函数内部可见。
- 实参:在调用函数时,实际传入的值。
示例:
定义 JavaScript 函数时,可以设置零个或多个参数。
function f(a, b) { //设置形参a和b
return a + b;
}
var x = 1, y = 2; //声明并初始化变量
console.log(f(x,y)); //调用函数并传递实参
在上面示例中,a、b 就是形参,而在调用函数时向函数传递的变量 x、y 就是实参。
参数规则
- 函数定义时形式参数没有指定数据类型。
- 函数对实际参数没有进行类型检测。
- 函数对实际参数的个数没有进行检测。
默认参数
如果函数在调用时未提供实际参数,参数会默认设置为: undefined
<script>
function myFunction(x, y) {
y = y || 0;
return x * y;
}
document.getElementById("demo").innerHTML = myFunction(4);
</script>
- 如果y已经定义 , y || 返回 y, 因为 y 是 true, 否则返回 0, 因为 undefined 为 false。
参数传递
javascript 中所有函数的参数都是按值传递的。也就是说,把函数外部的值复制到函数内部的参数,就和把值从一个变量复制到另一个变量一样。
-
基本类型值
在向参数传递基本类型的值时,被传递的值会被复制给一个局部变量(命名参数或arguments对象的一个元素)
function addTen(num){
num += 10;
return num;
}
var count = 20;
var result = addTen(count);
console.log(count);//20,没有变化
console.log(result);//30
-
引用类型值
在向参数传递引用类型的值时,会把这个值在内存中的地址复制给一个局部变量,因此这个局部变量的变化会反映在函数的外部
function setName(obj){
obj.name = 'test';
}
var person = new Object();
setName(person);
console.log(person.name);//'test'
当在函数内部重写引用类型的形参时,这个变量引用的就是一个局部对象了。而这个局部对象会在函数执行完毕后立即被销毁
function setName(obj){
obj.name = 'test';
console.log(person.name);//'test'
obj = new Object();
obj.name = 'white';
console.log(person.name);//'test'
}
var person = new Object();
setName(person);
网友评论