一,函数定义形式
1)通过函数声明的形式定义 eg:function myFun(){};
2)通过函数表达式来定义 eg :var add1=function(){};
3)通过Function构造函数实例化的形式定义 eg: var add2=new Function(); 里面可以传入任意个实参,最后一个实参为函数体
eg:var max=new Function("a","b","return a>b?a:b;");
函数没有函数名叫做匿名函数,匿名函数单独时无法运行的,可以把匿名函数复制给变量或立即执行。
二,函数的两个属性 name ,length
--name 属性:返回函数实例的名字 new Function()语法的函数名称为anonymous
--length属性:指明函数定义的形参个数
三,arguments对象
1,argument对象是用来记录传入函数的实参,不能够我们自己创建,只有函数调用的时候才会自动创建。是一个类数组对象
2,类数组对象与数组的区别
--与数组一样具有length与index属性
--本质却是Object
3,双向绑定特性,在调用arguments对象与实际传递了值的形参变量发生双向绑定,就是arguments对象中的对应单元和命名参数一一对应。
4,argument的length属性,表示函数调用传入的实参个数,实参个数确定,argument的length是不会发生改变的
注意:函数的length属性,指的是形参的个数,argument的length属性指的是实参的个数
四,call,apply bind方法
它们三个方法的作用都是是改变this的指向,它们是三个方法都是函数的方法
1,fn.call(this指向,参数1,参数2.,.....)
参数1,参数2指的是被调用函数的实参
说明:
--第一个参数是this指向,如果为传递,this默认指向window
--如果传递为undefined/null,this指向window
--如果传递为数字,字符串,布尔值,this指向该原始值的包装对象
call()方法的作用,调用函数然后执行函数的内容,并改变函数执行的this指向
2,fn.apply(this指向,[参数1,参数2,参数3,......])
和call()方法是一样的,不同点就是call()方法的参数是一个一个写出来的,而apply()方法除了第一个this指向的参数外,后面都是用一个数组将其余的参数放在一块
3,fn.bind(this指向,参数1,参数2,参数3,...)
bind()不会调用函数,不会执行原函数中的代码
3,apply,call,bind总结
--三个方法的第一个参数都是改变this指向
--apply,call,bind第一个参数为空,null,undefined,this指向的是window
--apply,call两个方法只是参数的形式不同,apply参数是一个数组,call参数则是列表序列
--apply,call都是立即调用函数执行,bind不是立即调用函数
五,函数调用形式(4种)
1,作为函数直接调用
-定时器函数,立即执行函数
2,作为对象方法调用
-事件函数
3,作为构造函数调用
4,call/apply间接调用
领取专属 10元无门槛券
私享最新 技术干货