js中括号“()“的使用和函数的一些使用方式

四种用法

  • 提高优先级
  • 函数的定义
  • 立即执行函数表达式
  • 执行单个或多个表达式并返回最后一个表达式的值
  • 条件表达式
  • 函数的四种调用方法

提高优先级

例如:(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)

你可能感兴趣的:(前端,js)