关于函数,你知多少?

author author     2022-09-23     541

关键词:

我们都知道,JS 中没有的类的概念。

而 函数 则是 JS 中 很重要,很重要,很重要的一点。

理解 函数 也是非常有必要的。

先来看看 函数的定义。

如下:

 1 // 函数声明
 2 // 函数声明不会立即调用,可以在你需要的时候调用它
 3 function demo(){
 4 
 5 }
 6 
 7 // 函数表达式, 该函数也可称为匿名函数(无函数名)
 8 // 该函数保存在一个变量中,可通过变量名调用该函数
 9 var demo = funciton(){
10 
11 };
12 
13 // 构造函数(不推荐)
14 // 该方法会造成两次解析代码,且js中 很多都避免使用 new 关键字
15 var demo = new function(){
16 
17 }

上面讲到了“函数的定义”,但是要怎么理解“函数声明”与“函数表达式”的不同呢?

让我们看看什么是“函数提升”?。

函数提升”,会把当前作用域(作用域的问题,后面会讲到)提升到前面的行为。这又代表着什么好处呢。

举个例子:

 1 // 调用函数 
 2    test();
 3 
 4 // 函数声明
 5 function test(){
 6     alert(‘调用成功‘);
 7 }
 8 
 9 // 调用函数
10    test();  // 报错
11 
12 // 函数表达式
13 var  test = function(){
14    alert(‘调用成功‘);
15 }

我们知道代码是从上而下的执行,一个变量若没有声明,则会抛出该变量未声明的报错信息。然后如上,为何可以如此呢?

这就是“函数提升”乾坤大罗移的时间了,由于“函数提升”的关系,因此调用函数,可以在函数声明之前。

但是,但是,但是,使用函数表达式不能被提升。

说了这么多,区别找到了吗 ? 除了“函数提升”,在写法上也有不同,这个细心的问题,就交给拥有慧眼的你了。

到这,我们已经了解了,函数的定义。也知晓了常用 调用函数的 方法。 接下来,我们聊聊 函数的参数

说到函数的参数,先看段代码吧!

1  demo(2,3); // 2,3 实参 
2 
3  function demo(sum1,sum2){ // sum1,sum2 虚参
4    return sum1 + sum2;    
5  }

函数参数分为:

  1.  显示参数:在函数定义时列出(也称虚参) 
  2.  隐藏参数(arguments):在函数调用时传递给函数真正的值(也称实参)

js 函数有个内置对象 arguments 对象,该对象包含了函数调用的参数数组。

参数规则:

  1.  函数定义时没有对参数指定数据类型,也就是说,参数可以为任何类型
  2.  函数对隐藏参数(arguments)的个数没有检测,也就是说可以传入比定义时参数的多
  3.  默认参数的值为 “undefined

再,再接下来聊聊 函数的调用 

也顺带着了解下 this 。

 

this 是什么? this 是指向当前调用的对象。

 1 // 作为一个函数调用
 2    test();
 3 
 4 //当函数没有被自身的对象调用时,this的值则会变成全局对象
 5 function test(){
 6     alert(this);   //  若在浏览器中打开,全局对象则是 window对象
 7 }
 8 
 9 // 作为一个对象的方法调用
10 var obj = {
11      sum1 : 10,
12      sum2 : 10,
13      sum   : function(){
14          console.log( sum1+sum2 );
15          console.log( this );
16      }  
17 }
18 // obj对象调用该函数 ,this的值指向当前对象 obj
19      obj.sum(); // 20, obj
20 
21 // 使用构造函数调用函数,
22 function test(name,age){
23     this.name = name;
24     this.age    = age;
25 }
26 // this 无任何值,this的值在调用实例化对象时(new object)创建
27 var obj = new test(‘Beck‘,21);
28       obj.name   // Beck
29 
30 // 自调用函数  
31 (function(){
32    console.log(‘自调用函数‘);
33 })

还有一种方式,函数的方法调用。我们知道,函数在js中也是对象, 也有属性和方法。

举个例子

1 function test(sum1,sum2){}
2 // 统计的是参数的个数
3 test.length  // 2

接下来,要了解的是,函数预定义的两个方法 “calc()”,“apply()”;

这两个方法,在于昨天总算明白一点,特此记录下。

这两个方法第一个参数,必须是 对象本身,也就是设置 this的值

而 calc() 与 apply() 的区别在于 第二个参数的不同、

apply() 的第二个参数,则是合成一个数组,而 calc() 的参数,则是全部显现的定义(从第二个参数开始)

举个例子

 1 // 定义个对象
 2 var obj = {};
 3 // 声明一个函数
 4 function test(sum1,sum2){
 5    console.log(sum1+sum2);  
 6 }
 7 //使用apply方法  没有自身对象调用 this的值提升为全局对象
 8 test.apply(this,[10,10]); // this的值为window ,输出 20
 9 
10 // 设置 this的值为 obj
11 test.apply(obj,[10,10]); // this的值为 obj. 输出20
12 
13 // 值的注意是是,即使只有一个参数,也必须使用 数组的方式传递
14 eg: test.apply(this,[10]);  //不然会报错
15 
16 // 使用 calc 方法 同上,只是参数定义的方式不同
17 test.calc(this,10,10);   // this的值为 window. 输出20
18 test.calc(obj,10,10);   // this的值为 obj ,输出 20

其实,看到两个方法差不多,可能到这,又要很多人纠结了,既然差不多,那么该使用哪个方法好一点呢。

也没必要纠结,使用哪一个方法,具体看你传入的参数哪个方便,哪个方便就使用哪个。

记录就这么多,后续有更好的理解,会持续维护。如果有错的地方,也希望你们指出来。

祝大家学习进步,共勉!

 

这些芯片知识,你知多少

...牛了,所以分享给大家。点这里可以跳转到教程。”关于芯片,我想大家应该不陌生,因为这两年有关芯片的话题经常登上各大媒体的热搜榜。我们听到最多的就是芯片短缺ÿ 查看详情

这些芯片知识,你知多少

...牛了,所以分享给大家。点这里可以跳转到教程。”关于芯片,我想大家应该不陌生,因为这两年有关芯片的话题经常登上各大媒体的热搜榜。我们听到最多的就是芯片短缺ÿ 查看详情

这些芯片知识,你知多少

...牛了,所以分享给大家。点这里可以跳转到教程。”关于芯片,我想大家应该不陌生,因为这两年有关芯片的话题经常登上各大媒体的热搜榜。我们听到最多的就是芯片短缺ÿ 查看详情

软能力那点事,你知多少(代码片段)

...尤其是在称赞某个人工作表现不错的时候更是如此。然而关于软能力是什么,一百个人有一百种解释,就好像一千个人有一千个哈姆雷特。一、软能力是什么什么是软能力?回答这个问题之前,我们先要了解什么是 查看详情

ython的高级特征你知多少?来对比看看(代码片段)

...么。下面是Python的5种高级特征,以及它们的用法。Lambda函数Lambda函数是一种比较小的匿名函数——匿名是指它实际上没有函数名。Python函数通常使用defa_function_name()样式来定义,但对于lambda函数,我们根本没为它命名。这是因为... 查看详情

博弈论,你知多少

“无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。”在《从“... 查看详情

博弈论,你知多少

“无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。”在《从“... 查看详情

国内最火的htmlcssjavascript开源项目top榜,你知多少?

对于开发者而言,想要着手前端开发,HTML、CSS和JavaScript是三项必备的基础技能。而如何事半功倍地掌握好这些知识?通过了解当下火热的开源项目不乏为最佳学习姿势。本文盘点国内评分最高且收藏量超过100的前端技术开源项... 查看详情

5g应用发展情况,你知多少

“无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。”最近我在... 查看详情

装修弱电,强电施工知识你知多少?

  家里的配电箱强电箱一般开发商都是预先安装在门后的,不适宜自己随便改动位置。但要注意是否安装了保护装置(空气开关,也称断路器)。这样发生短路或超负荷时,能自动跳闸,防止漏电意外。配电箱内的空气开关... 查看详情

ppt的6种逻辑图表关系,你知多少?

说到PPT一个很重要的东西,那就是逻辑图表。PPT中的逻辑图表不仅可以表达逻辑关系还能丰富页面。所以要很好的使用逻辑图表,但是做的逻辑图表不能像下面这样吧。这不是适得其反吗?图片来源于网络上面的图表使用的误区... 查看详情

ppt的6种逻辑图表关系,你知多少?

说到PPT一个很重要的东西,那就是逻辑图表。PPT中的逻辑图表不仅可以表达逻辑关系还能丰富页面。所以要很好的使用逻辑图表,但是做的逻辑图表不能像下面这样吧。这不是适得其反吗?图片来源于网络上面的图表使用的误区... 查看详情

企业iso14001认证的好处和基本条件,你知多少?

企业ISO14001认证有什么好处呢?通过认证使企业具有了走向市场的通行证,诸多企业招投标的重要条件。树立企业形象,提高企业的知名度、社会公信力。使企业获得进入国际市场的"绿色通行证"。提高企业管理水平及员工环境保... 查看详情

flash终于走向死亡!flash的兴衰之路你知多少

作为最大名鼎鼎的网络多媒体技术之一,Flash的名号可谓是无人不知无人不晓。然而,触手曾伸及形形色色网站的Flash,现在终于要退出历史的舞台。Adobe已经宣布,Flash将会在2020年停止开发和更新,这意味着Flash已经彻底走向淘... 查看详情

网吧行业的过去你知多少?新的未来又在何方?

细数网吧行业风雨20载,可以说是一波未平一波又起。1995年,中国第一家网吧“3C+T”在上海成立,网吧这一新名词开始流传在了大街小巷中。在当时,我国通信终端技术刚刚进入起步阶段,电脑等设备造价昂贵,拥有一台电脑... 查看详情

bim技术在各阶段应用的软件你知多少?

目前,在政府大力推广BIM的前提下建筑行业正处在加速的转型的高峰期,BIM技术的应用已经慢慢逐步被应用到各大项目中,就比如应用BIM技术的很有代表性的建筑中国尊。因此BIM在工程建设的全生命周期各阶段的应用,都需要相... 查看详情

carson带你学android:常见的动画类型你知多少?(代码片段)

前言动画的使用是Android开发中常用的知识可是动画的种类繁多、使用复杂,每当需要采用自定义动画实现复杂的动画效果时,很多开发者就显得束手无策本文将献上一份Android动画简介,包括动画的种类、使用、原理... 查看详情

android底层原理你知多少?你来说说handler吧!(代码片段)

0.前言做Android开发肯定离不开跟Handler打交道,它通常被我们用来做主线程与子线程之间的通信工具,而Handler作为Android中消息机制的重要一员也确实给我们的开发带来了极大的便利。可以说只要有异步线程与主线程通信... 查看详情