JavaScript中function的各种定义和使用方法,及function对象的理解。
在js中秉承着一切都是对象的原则,不论是方法还是其他都不例外。
我们在使用java的时候经常要编写方法,这时候其用的关键字是function,而在js中我们在编写函数的时候也是用这个关键字,所以常常会使我们错把两者进行关联,所以常常会把我们引导至一个错误的方向。
所以接下来我们先从function的各种定义开始说起:
1、先说说三种显式函数定义方法:
一:实际上就是我们平常最为常见的定义定法。
function func(test){ alert(""+test); }
二:通过Function的函数构造器进行函数对象的定义。
var func = new Function("test", "alert(''+test);"); 第一个参数实际上是表示要传入函数中的参数,第二个参数表示的是当前的函数要执行的过程。两个参数实际上都是string类型的。由此可以看出实际上是十分的繁杂混乱。
三:通过变量只带一块function关键字定义的方法来进行定义。
var func = function(test){alert(""+test);}
上面的三种方法虽然最后都是声明定义了一个函数,但是是有区别的。第一种方法实际上是为函数命名为func,而二三种方法使用起来实际上是把一个匿名函数赋值给一个变量。使用第二种方法来定义函数的时候,实际上就是调用构造函数并在每次解析的时候都会重新读取并创建一个新的函数对象,由此可见当在循环体中调用这样的函数会是十分的低效,还有一点就是,当我们使用其创建一个函数对象的时候,其并不遵循典型的作用域,而是一直作为顶级函数来执行。意思就是,当在函数内部调用它的时候,其实他并不会用函数内部定义的变量。而是只能使用全局变量。
2、下面再说说4种匿名函数的定义和使用方法:
下面第一三种方法实际上是定义了一种函数直接量也可以称之为是一种函数表达式。当我们不为函数直接量定义名称的时候。函数直接量就叫做匿名函数。那么我们如何调用一个匿名直接量,如下:
1、执行后得到返回值的函数调用
//方式一,调用函数,得到返回值。强制运算符使函数调用执行
(function(x,y){
alert(x+y);
return x+y;
}(3,4));
//方式二,调用函数,得到返回值。强制函数直接量执行再返回一个引用,引用在去调用执行
(function(x,y){
alert(x+y);
return x+y;
})(3,4);
//还有一种很奇葩的方式三,alert显示值为7,return值为-8,不信的可以自己试
~function(x,y){
alert(x+y);
return x+y;
}(3,4);
这样写实际上也是可以执行的~可以吧函数表达式进行运算符操作并使用后面的小括号中传入的参数。
2、执行后忽略返回值
//方式四,调用函数,忽略返回值
void function(x) {
x = x-1;
alert(x);
}(9);//这里实际上就是使用了void运算符,其用于计算之后的表达式并且不返回任何值。类似procedure过程
3、最后我们再来看看错误的函数写法
//错误的调用方式
function(x,y){
alert(x+y);
return x+y;
}(3,4);//这种方式是没有运算的。可以这样认为,把匿名函数作为表达式来看的话,我们并没有在一个计算的表达式中来调用函数表达式,所以其仅仅只是返回了表达式本身,这种写法无法执行
//错误的调用方式
function func(x,y){
alert(x+y);
return x+y;
}(3,4); //这样写是可以正常执行的,alert无法执行,返回值为4,很莫名其妙
本文来自博客园,作者:IT情深,转载请注明原文链接:https://www.cnblogs.com/wh445306/p/16751850.html