function函数
我们知道,在js中,函数实际上是一个对象,每个函数都是function函数类型的实例,并且都与其他引用类型一样具有属性和方法。,函数名实际上是指向函数对象的指针,不与某个函数绑定。在常见的两种定义方式(见下文)之外,还有一种定义的方式能更直观的体现出这个概念
var sum = ne Function("num1", "num2", "return num1 + num2"); //不推荐
Function的构造函数可以接收任意数量的参数,但一个参数始终被看做函数体。这种方式有个缺点是,会导致解析两次代码,第一次是基础的ES代码解析,第二次是解析传入构造函数中的字符串,这样会导致性能的下降,在此写出是帮助理解js中函数其实是对象这个概念。
(一)js函数没有重载的概念
说到重载的概念,我们来类比Java中的重载是怎么实现的在Java中,方法是通过方法签名来唯一标识一个方法。方法签名包括方法名、参数数量、参数顺序和参数类型这几个要素。两个方法的方法名相同,而其他签名要素不同,编译器就会认为是两个不同方法,从而可以存在同名的不同方法,以实现重载的概念。(引用怎么深入理解js中为什么没有重载呢--segmentfault 中manxisuo的回答)。
而上面我们说过,js中的函数名实际上是指向函数对象的指针,函数名可以说是一个函数的唯一标识,跟参数列表并没有关系,并不会出现同名的两个函数(因为一个指针只能指向一个对象)从而不存在重载的概念。
这样就很明显可以看出,上面一行将sum指向function(num1,num2),而接下来又将sum指向function(num1, num2, num3),从而造成第二次的指向覆盖了第一次的,更明显的看出js中并没有重载的概念。
(二)函数声明和函数表达式的区别
我们知道,常用的定义函数方法有两个函数声明和函数表达式。
函数声明,可以说是最常见的定义方法,如下例
这两段代码看起来差别不大,只是函数定义的方式不同而已。但事实是,第一段可以正常运行而第二段则会报错。这是因为,在代码开始执行之前,解析器就已经通过一个名为函数声明提升的过程,读取并将函数声明添加到执行环境中。简单来说,解析器会先将函数声明放在源代码树的顶部。而下面那段代码,函数位于一个初始化语句中(并不会将其提升到顶部),简单来说,在执行到这个赋值语句之前,sum并未指向任何一个函数,在之前调用函数则会报错。
以上所述是给大家介绍的JS中function函数的理解.
笔记本电脑维修
- 苹果电脑快捷键 苹果电脑快捷键大全表格
- 联想电脑维修 联想电脑维修地点
- 附近笔记本电脑维修 附近修笔记本电脑的地方
- 电脑硬件检测软件 电脑硬件检测软件通城网盘
- 电脑ip地址怎么看 清华同方电脑ip地址怎么看
- 电脑密码 电脑密码怎么去除掉
- 电脑没有声音 电脑没有声音是什么原因
- 电脑亮度怎么调 台式电脑亮度怎么调
- 电脑开机黑屏 电脑开机黑屏恢复按4个键
- 电脑ip地址 电脑ip地址冲突怎么解决
- 电脑无法开机 电脑无法开机一直黑屏
- 电脑维修免费上门附近
- 电脑黑屏怎么办 电脑黑屏怎么办主机还是亮的
- 360电脑管家 360电脑管家和腾讯电脑管家哪个更好
- 手机控制电脑 手机控制电脑的远程软件
- 电脑设置自动关机