在JS中,“创建”一个函数有两种方式,定义法和函数变量。以下是函数定义和函数变量的示例:
function foo () {} // 函数定义
var foo = function() {} // 函数变量
第一行中,foo是一个函数名,不是变量。它是全局性质的,代码任何地方都可以使用。
第二行中,foo是一个函数变量。它只能在作用域范围中,定义之后使用。
望采纳,谢谢支持!
JS函数调用的四种方法
1:方法调用模式
/*方法调用模式*/var myobject={
value:0,
inc:function(){
alert(this.value)
}
}
myobject.inc()
请注意this此时指向myobject
2:函数调用模式
/*函数调用模式*/
var add=function(a,b){
alert(this)//this被绑顶到window
return a+b
}
var sum=add(3,4)
alert(sum)
请注意this此时指向window
3:构造器调用模式
/*构造器调用模式 摒弃*/
var quo=function(string){
this.status=string
}
quo.prototype.get_status=function(){
return this.status
}
var qq=new quo("aaa")
alert(qq.get_status())
javascript语言精粹一书建议摒弃这种方式
4:apply调用模式
/*apply*///注意使用了上面的sum函数
//与myobject
//这中调用方式的优点在于可以指向this指向的对象。
//apply的第一个参数就是this指针要指向的对象
var arr=[10,20]
var sum=add.apply(myobject,arr)
alert(sum)
看这个apply真正应用。bind这是一个绑定时间的函数
var bind=function(object,type,fn){if(object.attachEvent){//IE浏览器
object.attachEvent("on"+type,(function(){
return function(event){
window.event.cancelBubble=true//停止时间冒泡
object.attachEvent=[fn.apply(object)]
//在IE里用attachEvent添加一个时间绑定以后。
//this的指向不是到object对象本身所以。我们绑定的function里的this.id是无法正常工作的。
//但是如果我们用fn.apply(object)
//这里可以看出我们是把apply的第一个对象也就是this的指向变更给了object所以this.id就变成了
//object.id 可以正常工作了。
}
})(object),false)
}else if(object.addEventListener){//其他浏览器
object.addEventListener(type,function(event){
event.stopPropagation()//停止时间冒泡
fn.apply(this)
})
}
}
bind(document.getElementById("aaa"),"click",function(){alert(this.id)})