javascript中函数调用的方法有几种?

JavaScript023

javascript中函数调用的方法有几种?,第1张

Javascript中定义函数的方式有多种,函数直接量就是其中一种。如var fun = function(){},这里function如果不赋值给fun那么它就是一个匿名函数。好,看看匿名函数的如何被调用。 方式1,调用函数,得到返回值。强制运算符使函数调用执行(function(x,y){ alert(x+y)return x+y}(3,4))方式2,调用函数,得到返回值。强制函数直接量执行再返回一个引用,引用再去调用执行(function(x,y){ alert(x+y)return x+y} )(3,4)这种方式也是很多库爱用的调用方式,如jQuery,Mootools。 方式3,使用voidvoid function(x) { x = x-1alert(x)}(9)

1:方法调用模式。

请注意this此时指向myobject。

/*方法调用模式*/

var myobject={

value:0,

inc:function(){

alert(this.value)

}

}

myobject.inc()

2:函数调用模式

请注意this此时指向window

/*函数调用模式*/

var add=function(a,b){

alert(this)//this被绑顶到window

return a+b

}

var sum=add(3,4)

alert(sum)

3:构造器调用模式

javascript语言精粹一书建议摒弃这中方式。因为有更好的方式。这里先不介绍。下次发表博文的时候贴出来。

会在这里加一个连接。

/*构造器调用模式 摒弃*/

var quo=function(string){

this.status=string

}

quo.prototype.get_status=function(){

return this.status

}

var qq=new quo("aaa")

alert(qq.get_status())

4:apply调用模式

==我们可以来看一个更有用的apply实例。看最下面的代码。

/*apply*/

//注意使用了上面的sum函数

//与myobject

//这中调用方式的优点在于可以指向this指向的对象。

//apply的第一个参数就是this指针要指向的对象

var arr=[10,20]

var sum=add.apply(myobject,arr)

alert(sum)

这个问题是可以办到的。

最关键的地方是获得调用者的名称,需要用到 arguments 对象读取 js 的调用栈。

function search(){

    // 以下两句是等效的

    alert(search.caller.name) 

    alert(arguments.callee.caller.name)

}

function baidu(){

    search()

}

function google(){

    search()

}

google()

baidu()

执行以上代码会分别得到 google 和 baidu。下面是对调用的对象分解解说:

name 和 caller 属性:

在 js(正确的名称应该是:ECMAScript) 里一切都是对象,变量就不用说了,连函数也是作为对象存在的。每个函数都有 name 和 caller 属性,name 属性返回函数的名称,而 caller 属性返回的是调用它的函数对象(是对象不是名称)。

arguments 对象及它的 callee 属性:

而函数在调用开始会生成一个 arguments 对象,这个对象不光能读取到转递给函数的参数,还能通过 callee 属性返回生成它的函数对象,在上面的例子中 arguments.callee == search 函数对象,使用 arguments.callee 的好处是当 search 函数改名也不会影响程序的正确性。

根据以上两条,不难得到 arguments.callee.caller.name 就是当前函数的调用者名称了