JavaScript是弱类型语言,定义函数时既不需要声明函数的返回值类型,也不需要声明函数的参数类型。
JS目前共支持三种函数定义方式,定义命名函数、定义匿名函数、使用Function类匿名函数,这里介绍一下这三种方式。
1.定义命名函数
这个方法是我们最常用的。
语法格式:
function functionName(parameter-list){
statements
}
语法示例:
<script type="text/javascript">
//创建一个函数并调用
hello('Searchin');
function hello(name)
{
alert("hello"+name);
}
<script>
上面这段代码涉及到了函数提升,如果对函数提升和变量提升不清楚的,可以看看我之前写的一篇博客,里面写的很详细。
博客链接:https://blog.csdn.net/Searchin_R/article/details/82896219
2.定义匿名函数
这个方法是一个非常实用的方法。
语法格式:
function(parameter list)
{
statements
};
语法示例:
<script type="text/javascript">
var a=function(name)
{
document.writeln('匿名函数<br>');
document.writeln('你好'+name);
};
a('Searchin');
</script>
上面这段代码就定义了一个匿名函数,也就是定义了一个Function对象,然后将这个函数赋值给变量a,后面就可以通过a来调用函数。
匿名函数的优点很明显:它可以提供更好的可读性。因此,在需要为类、对象定义方法的时候,可以使用匿名函数来提供更好的可读性。
到这里,我们需要回头看一下第一种方法,我们在第二种方法中将匿名函数赋值给变量a,其实,也可以将命名函数赋值给一个变量。但这时候要注意:如果将有名字的函数赋值给一个变量,那么该函数原来被定义的名字就会被忽略,相当于改了一个名字。这时候,如果再通过原函数名来调用该函数,则会出错。
3.使用Function类匿名函数
JavaScript提供了一个Function类,因为该类的构造器的参数个数可以不受限制,且可以接受一系列的字符串参数,因此该类可以用来定义函数。
语法规则:最后一个字符串参数是函数的执行体,执行体的各语句以分号(;)隔开,而前面的各字符串参数则是函数的参数。
语法示例:
<script type="text/javascript">
//定义匿名函数并赋值给变量a。
var a=new Function('name',"document.writeln('Function定义的函数<br>');"+"document.writeln('你好'+name);" );
//通过变量调用匿名函数
a('Searchin');
</script>
上面的代码中new Function()语法定义了一个匿名函数并将其赋值给变量a,从而允许通过变量a来访问匿名函数。
这种方式的缺点很明显:Function()构造器的最后一个字符串代表函数执行体,当函数执行体的语句很多的时候,Function的最后一个参数会显得很臃肿,使得函数的可读性不好。
好啦,以上就是定义函数的三种方式,想用哪一种就看大家的喜好和项目的需求啦。