搜索
写经验 领红包
 > 职场

javascipt中函数(javascipt中的函数该如何理解)

导语:javascript函数细说,函数也能做对象,你追到了吗?

javascript函数不同于其他的语言,每个函数都是作为一个对象被维护和运行的。通过函数对象的性质,可以很方便的将一个函数赋值给一个变量或者将函数作为参数传递。:

一 js中function()

1、用function关键字定义一个函数,并为每个函数指定一个函数名,通过函数名来进行调用。在JavaScript解释执行时,函数都是被维护为一个对象,即函数对象(Function Object)。

2、函数对象与其他用户所定义的对象有着本质的区别,这一类对象被称之为内部对象,如日期对象(Date)、数组对象(Array)、字符串对象(String)等都属于内部对象。这些内置对象的构造器是由JavaScript本身所定义的,通过执行new Array()语句返回一个对象,JavaScript内部有一套机制来初始化返回的对象,而不是由用户来指定对象的构造方式。

3、在JavaScript中,函数对象对应的类型是Function,正如数组对象对应的类型是Array,日期对象对应的类型是Date。即可以通过new Function()来创建一个函数对象,也可以通过function关键字来创建一个对象

4、声明函数的语法

function func(…){…}

var func=function(…){…};

var func=function func1(…){…};

var func=new Function();

二、function()函数对象的创建

1、用new Function()的形式来创建一个函数

var func=new Function(p1,p2,...,pn,body);

参数的类型都是字符串,p1到pn表示所创建函数的参数名称列表,body表示所创建函数的函数体语句,funcName就是所创建函数的名称。还可以不指定任何参数创建一个空函数,不指定func创建一个匿名函数(函数没有任何意义)。

示例

new Function("a","b","c","return a+b+c");

new Function("a,b,c", "return a+b+c");

new Function("a,b","c", "return a+b+c");

2、创建完成后立即调用函数

示例

var val=function(a,b){

return a+b;

}(1,2);

alert(val); val是表示返回的值,并非创建的函数,因为括号“()”的优先级高于等号“=”等号。可以用于在很长的代码段中进行模块化设计或者想避免命名冲突。

3、有名函数与匿名函数

function funcName(){函数体}。

var funcName=function(){函数体}。

前面一种方式创建的是有名函数,而后面一种方式是创建一个匿名函数,匿名函数只是让一个变量指向了这个匿名函数本身。在使用上仅有一点区别,即对于有名函数,它可以先调用再定义。而对于匿名函数,它必须在调用之前定义。

示例

有名函数与匿名函数的区别示例

由上述示例可知,尽管JavaScript是一门解释型的语言,但在函数调用时,会检查整个代码中是否存在相应的调用函数是否定义,函数是通过function funcName()形式定义的才会有效,而不能是匿名函数。

三、函数对象与内部对象的关系

除了函数对象,还有很多内部对象,比如:Object、Array、Date、RegExp、Math、Error。这些名称实际上表示一个类型,可以通过new操作符返回一个对象。然而函数对象和其他对象不同,当用typeof返回一个函数对象的类型时,它仍然会返回字符串“function”,而typeof返回数组对象或其它对象时,则会返回字符串“object”。

示例

使用typeof返回不同对象类型

alert(typeof(Function()));

alert(typeof(new Function()));

alert(typeof(Array));

alert(typeof(Object));

alert(typeof(new Array()));

alert(typeof(new Date()));

alert(typeof(new Object()));

上实例输出结果:前面4条语句都会显示“function”,而后面3条语句则显示“object”,可见new一个function实际上是返回 一个函数。这与其他的对象有很大的不同。其他的类型Array、Object等都会通过new操作符返回一个普通对象。尽管函数本身也是一个对象,但它与普通的对象还是有区别的,因为它同时也是对象构造器,也就是说,可以new一个函数来返回一个对象,这在前面已经介绍。所有typeof返回“function”的对象都是函数对象。也称这样的对象为构造器(constructor),因而,所有的构造器都是对象,但不是所有的对象都是构造 器。

四、函数作为参数

在前面说到每个函数都被表示为一个特殊的对象,即将其赋值给一个变量,再通过变量名进行函数调用。作为一个变量,则可以将其用作参数的形式传递给另一个函数。

示例

将func2作为参数传递给func1

function func1(newFunc){

newFunc();

}

function func2(){

alert("ok");

}

func1(func2);

注:如果需要在页面载入时进行一些初始化工作,可以先定义一个init的初始化函数,再通过window.onload=init;语句将其绑定到页面载入完成的事件。这里的init就是一个函数对象,它可以加入window的onload事件列表。

感谢您阅读了这篇文章,希望会对您有所帮助。喜欢文章就关注我吧,后面的文章内容会越来越精彩喔!

本文内容由小畅整理编辑!