大家好,小乐来为大家解答以上问题,函数的定义,函数的定义很多人还不知道,现在让我们一起来看看吧!
1、我们知道,在js中,函数实际上是一个对象。每个函数都是该函数类型的一个实例,并且像其他引用类型一样具有属性和方法。因此,函数名实际上是指向函数对象的指针,并不与函数绑定。除了这两个常见的定义(见下文),还有另一个定义可以更直观地反映这一概念:
2、var sum=新函数(' num1 ',' num2 ',' return num 1 num 2 ');//不推荐
3、函数的构造函数可以接收任意数量的参数,但最后一个参数总是被视为函数体。这种方法的缺点是会导致代码被解析两次,第一次是基本的ES代码解析,第二次是传入构造函数中的字符串解析,会导致性能下降。写在这里是为了帮助理解函数实际上是js中的对象这个概念。
4、(A) js函数没有重载的概念
5、说到重载的概念,我们来打个比方,重载是如何在Java中实现的:在Java中,一个方法通过方法签名唯一地标识一个方法。方法的签名包括以下元素:方法名、参数数量、参数顺序和参数类型。因此,如果两个方法的方法名相同,但其他签名元素不同,编译器会认为它们是两个不同的方法,这样就可以存在不同的同名方法,以实现重载的概念。(引用:如何深刻理解js-曼希索的回答in - segmentfault为什么没有过载)。
6、我们上面说过,js中的函数名实际上是一个指向函数对象的指针,所以函数名可以说是一个函数的唯一标识符,与参数列表无关。所以不会有两个同名的函数(因为一个指针同时只能指向一个对象),所以不存在重载的概念。
7、这样很明显上面的线点sum到function(num1,num2),然后点sum到function(num1,num2,num3),这样就造成了第二个指向覆盖了第一个,所以更明显的是js中没有重载的概念。
8、(二)函数声明和函数表达式的区别
9、我们知道,定义函数常用的方法有两种:函数声明和函数表达式。
10、函数声明,可以说是最常见的定义方法,如下所示:
11、这两段代码看起来没有太大区别,只有函数定义不同。但事实是,第一段可以正常运行,而第二段将报告一个错误。这是因为,在代码开始执行之前,解析器已经通过一个称为函数声明提升的过程读取了函数声明并将其添加到执行环境中。简单地说,解析器首先将函数声明放在源代码树的顶部。在下面的代码中,该函数位于初始化语句中(它不会被提升到顶部)。简单来说,在赋值语句执行之前,sum没有指向任何函数,所以之前调用函数会出错。
12、以上是对JS中函数function的理解,希望对你有帮助。
本文讲解到此结束,希望对大家有所帮助。