1. JavaScript定义函数的几种方法
常见的四种定义函数的方法如下:
- 使用直接量方式声明命名函数
这方式是最常用的方式是function fun(){};
- 函数表达式
声明为匿名函数然后赋值给一变量,很常见的方式:var fun=function(){};
在这种方式下,function(){}
是一个匿名函数,它没有函数名。但是,这个匿名函数赋值给了变量fun,所以,通过变量fun就可以调用该函数
- 使用
function
关键字声明命名函数
第三种是将func
赋给变量fun
,var fun=function fun(){};
- 使用
Function
对象构造方法创建函数
声明fun
为一个对象var fun=new Function();
。
2.几种方法的区别
- 其实第一种
function
定义和第三种使用function
关键字声明命名函数定义方式差不多,但是仅以声明方式定义的方法,会被声明提前,而第三种方式不会。
如下面这种方式是正确的:
func(1);
function func(a)
{
alert(a);
}
Javascript
引擎在解析javascript
代码时会‘函数声明提升',当前执行环境(作用域)上的函数声明,而函数表达式必须等到Javascript
引擎执行到它所在行时,才会从上而下一行一行地解析函数表达式。 但是第三种定义方式的在声明前调用是错误的,会提示func
未定义:
func(1);
var func = function(a)
{
alert(a);
}
- 使用Function对象构造方法创建函数,可改变且运行效率低
以声明方式和直接量方式定义的方法,方法体固定,无法在运行时动态执行。但是以创建对象方式定义的方法,方法体是字符串,可以在运行时动态创建,修改,并执行字符串格式的方法体。
以创建对象方式定义的方法,因为方法体是字符串,需要再次解析。所以执行效率较另外两种方式较低。
- 定义匿名函数
匿名函数就是定义时未直接指定名称的函数:
var fun = function(args,arg2){
var sum = arg1+arg2;
}
// 也可以直接定义匿名函数
(function(){
...
})();
函数表达式后面可以加括号立即调用该函数,函数声明不可以,只能以fnName()
形式调用。
匿名函数只有在被调用时才被初始化,最后面的一对小括号里面可以传参,这种自调用方式不需要调用,会自动执行。
匿名函数有一个好处就是,匿名函数内部定义的变量时私有变量,作用域只在当前函数内,不会被外部引入的js同名变量污染。
匿名函数比非匿名函数更节省内存空间: 因为非匿名函数在定义时就已经创建函数对象和作用域链对象,所以,即使未调用,也占用内存空间。
匿名函数仅在调用时才会临时创建函数对象和作用域链对象,调用完会立刻释放。
3.总结
在开发中多使用直接量方式function fun(){}
,但是在现在ESlint
检查严格模式下,这种定义方式不会被声明提前,如果定义前使用会报警告错误。
匿名函数属于函数表达式,匿名函数有很多作用,赋予一个变量则创建函数,赋予一个事件则成为事件处理程序或创建闭包等等。
在java-web
工程中常见jQuery
使用时:
(function(arg){}(jQuery))
其实就相当于定义了一个参数为arg
的匿名函数,同时jQuery
作为参数来调用这个匿名函数,在所有DOM
元素加载之前执行的jQuery代码。
也就是(function(arg){}(jQuery))
用来定义一些需要预先定义好的函数;而(function(){})
则是用来在DOM
加载完成之后执行那些预行定义好的函数。
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!