JS函数参数
- JS不会对函数的参数进行任何检查
- JS不会关注函数的参数有多少个,也不关注参数的数据类型
- 参数分为显示参数(制定了函数参数)和隐藏参数(arguments)
默认参数
如果JS函数的一个参数调用时缺少这个参数的值,那么值为 undefined.
arguments 参数
argument 对象包含了函数调用的参数数组。
代码示例
通过函数来统计所有传入数值的和。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<p>计算所有参数之和:</p>
<p id="demo"></p>
<script>
function sumAll() {
var i, sum = 0;
for(i = 0; i < arguments.length; i++) {
sum += arguments[i];
}
return sum;
}
document.getElementById("demo").innerHTML =
sumAll(1, 123, 500, 115, 44, 88);
</script>
</body>
</html>
函数参数通过值传递
- 如果在函数内修改参数的值,将不会修改参数的初始值(在函数外定义)
通过对象传递参数
- 如果在函数内部修改对象的属性就会修改其初始的值
- 修改对象属性可作用于函数外部(全局变量)
var obj = {x:1};
// 通过对象传递参数
function myFunction(obj) {
obj.x++; //修改参数对象obj.x的值,函数外定义的obj也将会被修改
console.log(obj.x);
}
myFunction(obj); // 2
console.log(obj.x); // 2
闭包
通俗理解就是在函数内部在定义一个函数,这个函数可以读取函数内部的变量。
闭包就是将函数内部和函数外部连接起来的一座桥梁
用途
- 可以读取函数内部的变量
- 让函数内的变量值始终保持在内存中
举例
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
return function(){
return this.name;
};
}
};
alert(object.getNameFunc()()); //输出 The Window
var name = "The Window";
var object = {
name : "My Object",
getNameFunc : function(){
var that = this;
return function(){
return that.name;
};
}
};
alert(object.getNameFunc()()); // 输出 My Object