提高优先级
例如:(1+2)*3
函数的定义
例如:function(形参列表){}
立即执行函数表达式
例如:(function fun(a,b){})(1,2)
常用的匿名函数
1)可以使用多种运算符开头但一般用!
!function(形参列表){}(实参列表)
2)使用()将函数及函数后的括号包裹
(function(){}());
执行单个或多个表达式并返回最后一个表达式的值
例如:var k = (a=1,obj.fun);//a被赋值1,k为对象中的函数
解引用的写法
目的是使fun这个方法里无法通过this获取对象obj
从而保护obj类里的变量和方法
(0,obj.fun)()
等价于
a = obj.fun
a()
条件表达式
例如:if(1>2){}
函数的四种调用方法
方法调用模式
函数调用模式
apply调用模式
构造器调用模式(建议摒弃)
方法调用模式
请注意this此时指向myobject。
/*方法调用模式*/
var myobject={
value:0,
inc:function(){
alert(this.value)
}
}
myobject.inc()
函数调用模式
请注意this此时指向window
/*函数调用模式*/
var add=function(a,b){
alert(this)//this被绑顶到window
return a+b;
}
var sum=add(3,4);
alert(sum)
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)
});
测试
var myobject = {
value: 0,
inc: function() {
console.log("inc1")
console.log(this.value)
this.value = 2
return this
}
}
var k = myobject.inc;
var func = (0,myobject.inc)
console.log("=============(myobject.inc)======================")
console.log((myobject.inc))//函数引用
console.log("=============(0,myobject.inc)======================")
console.log((0,myobject.inc))//函数表达式返回
console.log("=============func()======================")
console.log(func())
console.log("============(myobject.inc)()=======================")
console.log((myobject.inc)())
console.log("==============(0,myobject.inc)()=====================")
console.log((0,myobject.inc)())
var a =1;
(a=0,myobject.inc)
console.log("==============(myobject.inc,a=0)=====================")
console.log((myobject.inc,a=0))
console.log("==============报错=====================")
console.log((myobject.inc,a=2)())
console.log(a)