详细分析JavaScript函数定义
函数
几个要点:
a).函数是javascript中的一等公民(重要性)
b).函数是一个对象
c).函数定义了一个独立的变量作用域
定义方式
a)命名函数:
除非在另一个函数内部定义,否则,命名函数是全局的。
//全局的命名函数
functionadd(x,y){
returnx+y;
}
console.info(add(100,200));//300
b)匿名函数:
匿名函数通常赋值给一个变量,再通过变量调用。
varfunc=function(x,y){
returnx+y;
}
console.info(func(5,2));//7
匿名函数适用于以下这种“立即执行的匿名函数”的情况:
console.info(
function(x,y){
returnx+y;
}(100,200)//立即调用
);
C)定义方式影响代码执行效果
命名函数可以先使用,再定义
console.info(sum(10,10));
functionsum(num1,num2){
returnnum1+num2;
}
匿名函数必须先定义,再使用
//console.info(sumFunc(10,10));//UncaughtTypeError:Property'sumFunc'ofobject[objectObject]isnotafunction
varsumFunc=function(num1,num2){
returnnum1+num2;
};
console.info(sumFunc(10,10));
函数返回值:
用return生成返回值.如没有return,则函数返回undefined
functionfunc(){
}
console.info(func());//undefined
functionfunc2(){
return;//空的返回语句
}
console.info(func2());//undefined
return里藏着的坑:
varfunc=function(x,y){
varsum=x+y;
return{
value:sum
}
}
这么写没有问题: 调用func(5,5) 返回的是Object{value:10}
然而:
varfunc=function(x,y){
varsum=x+y;
return
{
value:sum
};
}
console.info(func(5,5));//undefined
return后面跟着个回车换行的话,
调用func(5,5) 显示的是undefined
编辑器帮我们在return后加了个分号; 然而在这情况下并没有什么卵用。
函数即对象:
functionadd(x,y){
returnx+y;
}
console.info(add(100,200));//300
varother=add;//other和add引用同一函数对象
console.info(other(300,400));//700
console.info(typeofother);//function
console.info(add===other);//true
嵌套定义的函数:
在函数内部,可以定义另一个函数。
functionouterFunc(a,b){
functioninnerFunc(x){
returnx*x;
}
returnMath.sqrt(innerFunc(a)+innerFunc(b));
}
console.info(outerFunc(3,4));//5
访问外部变量:
内部函数可以访问外部的变量与参数。
varglobalStr='globalStr';
functionouterFunc2(argu){
varlocalVar=100;
functioninnerFunc2(){
localVar++;
console.info(argu+":"+localVar+":"+globalStr);
}
innerFunc2();//hello:101:globalStr
}
outerFunc2("hello");
返回函数的函数:
因为函数是对象,所以可以作为返回值。
functionouterFunc(x){
vary=100;
returnfunctioninnerFunc(){
console.info(x+y);
}
}
outerFunc(10)();//110
以上所述就是本文的全部内容了,希望大家能够喜欢。