07.函数
定义函数¶
方式1¶
Text Only
function abs(x){
if(x>0){
return x;
}else{
return -x;
}
}
一旦执行到 return 代表函数结束,返回结果。
如果没有执行 return ,函数执行完也会返回结果,结果就是 undefined
方式2¶
Text Only
var abs=function(x){
if(x>0){
return x;
}else{
return -x;
}
}
这是一个匿名函数。但是可以把结果赋值给 abs,通过abs 就可以调用函数
方式一和方式二等价
调用函数¶
Text Only
abs(10);//10
参数处理¶
参数问题: javaScript 可以传任意个参数,也可以不传递参数参数进来是否存在的问题? 假设不存在参数,如果规避?
Text Only
var abs=function(x){
if(typeof x!='number'){
throw "Not a number";
}
if(x>0){
return x;
}else{
return -x;
}
}
arguments¶
代表,传递进来的所有的参数,是一个数组
Text Only
var abs=function(x){
console.log("x="+x);
for(var i=0;i<arguments.length;i++){
console.log(arguments[i]);
}
if(typeof x!='number'){
throw "Not a number";
}
if(x>0){
return x;
}else{
return -x;
}
}
问题: arguments 包含所有的参数,我们有时候想使用多余的参数来进行附加操作
reset¶
以前
Text Only
if(arguments.length>2){
for(var i=2;i<arguments.length;i++){
console.log(arguments[i]);
}
}
现在
Text Only
function aaa(a,b,...rest){
console.log(a);
console.log(b);
console.log(rest);
}
rest参数只能写最后面,必须用...标示
变量的作用域¶
在javascript中,var 定义变量实际是有作用域的。假设在函数体中声明,则在函数体外不可以使用~(非要想实现的话,后面可以研究一下 闭包
Text Only
function aaa(){
var x=1;
x=x+1;
}
x=x+2;//报错
如果两个函数使用了相同的变量名,只要在函数内部,就不冲突
内部函数可以访问外部函数的成员,反之则不行