一,函数的三种定义方式 1,函数声明 function fn(){ console.log('this is a function') } 2,函数表达式 var fn = function(){ 3,内置构造函数 var fn=new Function("name","age","alert(name+age)") 二,函数的调用 1,自调用 (function(){ console.log('我是自调用函数') })() 2,普通调用 var f1 = function(){ alert('我是一个函数') } f1(); 3,对象属性中调用 var o = {a:function(){console.log('我是函数a')}} o.a(); 4,数组中 var arr = [function(){alert('我是第一个')}, function(){alert('我是第二个')}, function(){alert('我是第三个')}] arr[0](); 5,回调函数 function a(fn){ fn(); } a(function(){console.log('我是a的回调函数')}) 三,apply,call和bind的使用 call 和 apply 特性一样 都是用来调用函数,而且是立即调用,但是可以在调用函数的同时,通过第一个参数指定函数内部 this 的指向 call 调用的时候,参数必须以参数列表的形式进行传递,也就是以逗号分隔的方式依次传递即可 apply 调用的时候,参数必须是一个数组,然后在执行的时候,会将数组内部的元素一个一个拿出来,与形参一一对应进行传递 如果第一个参数指定了 null 或者 undefined 则内部 this 指向 window bind 可以用来指定内部 this 的指向,然后生成一个改变了 this 指向的新的函数它和 call、apply 最大的区别是:bind 不会调用,bind 支持传递参数,它的传参方式比较特殊,一共有两个位置可以传递 在 bind 的同时,以参数列表的形式进行传递 在调用的时候,以参数列表的形式进行传递 那到底以谁 bind 的时候传递的参数为准呢还是以调用的时候传递的参数为准 两者合并:bind 的时候传递的参数和调用的时候传递的参数会合并到一起,传 递到函数内部 四,高级应用 函数的其它成员 arguments实参集合 caller函数的调用者 length形参的个数 name函数的名称 函数可以用于参数也可用于返回值 五,函数闭包 什么是闭包 闭包就是能够读取其他函数内部变量的函数,由于在 Javascript 语言中,只有函数内部的子函数才能读取局部变量,因此可以把闭包简单理解成 “定义在一个函数内部的函数”。所以,在本质上,闭包就是将函数内部和函数外部连接起来的一座桥梁。 闭包的用途: 1,可以在函数外部读取函数内部成员 2,让函数内成员始终存活在内存中