详细分析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
以上所述就是本文的全部内容了,希望大家能够喜欢。