JS进阶 函数定义和调用形式

一,函数定义形式

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间接调用

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200819A06N2S00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券