棋牌网站开发搭建,贵州省建设执业资格促进会网站,网站原型图大小,十堰新闻正文#xff1a;我们知道#xff0c;在js中#xff0c;函数实际上是一个对象#xff0c;每个函数都是Function类型的实例#xff0c;并且都与其他引用类型一样具有属性和方法。因此#xff0c;函数名实际上是指向函数对象的指针#xff0c;不与某个函数绑定。在常见的两…正文我们知道在js中函数实际上是一个对象每个函数都是Function类型的实例并且都与其他引用类型一样具有属性和方法。因此函数名实际上是指向函数对象的指针不与某个函数绑定。在常见的两种定义方式(见下文)之外还有一种定义的方式能更直观的体现出这个概念var sum new Function(num1, num2, return num1 num2); //不推荐Function的构造函数可以接收任意数量的参数但最后一个参数始终被看做函数体。这种方式有个缺点是会导致解析两次代码第一次是基础的ES代码解析第二次是解析传入构造函数中的字符串这样会导致性能的下降在此写出是帮助理解js中函数其实是对象这个概念。(一)js函数没有重载的概念说到重载的概念我们来类比Java中的重载是怎么实现的在Java中方法是通过方法签名来唯一标识一个方法。方法签名包括方法名、参数数量、参数顺序和参数类型这几个要素。因此两个方法的方法名相同而其他签名要素不同编译器就会认为是两个不同方法从而可以存在同名的不同方法以实现重载的概念。(引用怎么深入理解js中为什么没有重载呢--segmentfault 中manxisuo的回答)。而上面我们说过js中的函数名实际上是指向函数对象的指针因此函数名可以说是一个函数的唯一标识跟参数列表并没有关系因此并不会出现同名的两个函数(因为一个指针同时只能指向一个对象)从而不存在重载的概念。 举个栗子function sum(num1, num2){return num1 num2;}function sum(num1, num2, num3){return num1 num2 num3;}上面这种可以换一种写法会更直观一些var sum function(num1, num2){return num1 num2;}sum function(num1, num2, num3){return num1 num2 num3;}这样就很明显可以看出上面一行将sum指向function(num1,num2)而接下来又将sum指向function(num1, num2, num3)从而造成第二次的指向覆盖了第一次的因此更明显的看出js中并没有重载的概念。(二)函数声明和函数表达式的区别我们知道常用的定义函数方法有两个函数声明和函数表达式。函数声明可以说是最常见的定义方法如下例function sum(num1, num2){return num1 num2;}函数表达式这种定义方式在闭包及一些框架中使用较多例如angular中常见的$scope.doSomething function(){...}sum function(num1, num2){return num1 num2;};上述两种定义方法几乎是相同的但有一点小区别请看下面这个例子//函数声明alert(sum(100, 100));function sum(num1, num2){return num1 num2;}//函数表达式alert(sum(100, 100));var sum function(num1, num2){return num1 num2;};这两段代码看起来差别不大只是函数定义的方式不同而已。但事实是第一段可以正常运行而第二段则会报错。这是因为在代码开始执行之前解析器就已经通过一个名为函数声明提升的过程读取并将函数声明添加到执行环境中。简单来说解析器会先将函数声明放在源代码树的顶部。而下面那段代码函数位于一个初始化语句中(并不会将其提升到顶部)简单来说在执行到这个赋值语句之前sum并未指向任何一个函数因此在之前调用函数则会报错。以上所述是小编给大家介绍的JS中函数function的理解(基础篇)希望对大家有所帮助如果大家有任何疑问请给我留言小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持本条技术文章来源于互联网如果无意侵犯您的权益请点击此处反馈版权投诉本文系统来源php中文网