js-高级04-函数高级应用

一,函数的三种定义方式
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,让函数内成员始终存活在内存中

原文地址:https://www.cnblogs.com/adylz111/p/13433767.html