首页 > 编程语言 >JavaScript函数详解:匿名函数、具名函数、函数传参、不定参、返回值、JS预解析机制

JavaScript函数详解:匿名函数、具名函数、函数传参、不定参、返回值、JS预解析机制

时间:2023-02-03 14:44:36浏览次数:72  
标签:传参 函数 JavaScript JS var 解析 声明 变量

 

JavaScript函数详解:匿名函数、具名函数、函数传参、不定参、返回值、JS预解析机制 

 

1.具名函数 

定义:

 调用:

  方式1:方法名(); 可以多次调用

       

        方式2:在事件中调用,直接写函数名,不需用括号

         

 

2.匿名函数

  • 没有名字的函数
  • 匿名函数在使用时只有两种情况:

   1.匿名函数自执行:声明后不需要调用就直接执行
             

           2.把函数存到变量,或将函数存到数组的对应位置里等,调用时通过变量或数组对应位置进行调用。调用时需要写括号。

 

3.函数表达式

把函数存到变量,或将函数存到数组的对应位置里等,调用时通过变量或数组对应位置进行调用。调用时需要写括号。 

 

4.使用new Function方式

 

5.函数传参

  • 形参:形式上的参数——给函数声明一个参数;
  • 实参:实际的参数——在函数调用时给形参赋的值

      

 

6.函数返回值

即函数执行之后的返回结果。
  • 所有函数都会有函数返回值即函数执行后一定会返回一个结果,如果没有定义默认返回undefined;
  • 在函数中,return后定义返回值;
  • 在函数中,return之后的代码就不会再执行了
  • return只能用于函数中,用在其他地方会报错

 

7.函数的不定参(可变参)使用关键字arguments

 

8.事件函数扩展

给元素添加事件的说法是不正确的。事件是元素本身就具有的特征,只是触发事件后,默认没有相关的一些处理。这种操作其实就是给元素的某个事件添加一个事件处理函数。当事件被触发后,判断到属于该事件类型,就触发该事件函数的处理函数。

可以通过console.dir()把对象的所有属性和方法打印出来,查看对象或元素本身具有的事件。

 

9.JS预解析机制(变量提升)

JS预解析机制(变量提升(Hoisting)):JS在读取到一个script标签(或者一个函数作用域)时,会先进行一个预解析的过程,在这个过程中,会把除函数中的var声明的变量和function声明的函数体,提升到整个scriptt标签(或者一个函数作用域)最前边去。而函数中var声明的变量会提升到函数内部的最前面,如果与外部的变量命名冲突,不会影响外部变量的声明以及赋值。函数内部使用一个变量时,首先会在函数内部寻找,如果没有,会一层一层向外查找。在预解析完之后,JS才会从上到下一行一行解析代码并执行。

  • var在预解析时,会把声明提升到最前边(赋值前打印返回undefined)。只提升声明,不会把赋值过程进行提升
  • function的函数体在预解析时,会把整个函数体提升至最前边
  • 函数表达式(函数表达式:var fn = function(){};)只会提升函数表达式的声明,不会执行(真正执行函数表达式前调用会返回undefined)
  • 在预解析时,会先预解析var(包括变量声明和函数表达式的变量声明),先把var放在最前面,然后再预解析function,所以当var和function重名时,function会覆盖var

 案例1:

      

   结果:

      

   案例2:

     

    结果:

    

注意:

JS预解析机制不是良好的编码习惯,不利于代码维护,建议不要使用,编码时建议先声明,再使用。

扩展:从概念的字面意义上说,“变量提升”意味着变量和函数的声明会在物理层面移动到代码的最前面,但这么说并不准确。实际上变量和函数声明在代码里的位置是不会动的,而是在编译阶段被放入内存中。

ES6之后就不能像JS预解析这么编写JS代码了,例如:

 

 

标签:传参,函数,JavaScript,JS,var,解析,声明,变量
From: https://www.cnblogs.com/webSnow/p/17089236.html

相关文章

  • 前端——函数(匿名函数、自执行函数)
    前端——函数(匿名函数、自执行函数)FreshLemon_于2019-06-1117:11:49发布函数声明:functionbox(){}函数表达式:varbox=function(){};匿名函数:function(){}......
  • C++ 哈希表查询_进入哈希函数结界的世界
    1.前言哈希表或称为散列表,是一种常见的、使用频率非常高的数据存储方案。哈希表属于抽象数据结构,需要开发者按哈希表数据结构的存储要求进行API定制,对于大部分高级语言......
  • vue3中的setup函数
    setup函数是组合式API的入口setup函数是页面启动后的自执行函数页面中所涉及的变量和方法都需要下载setup函数中在setup中定义的变量,方法都需要return出去才可以使用,否则......
  • #Python 文本包含pandas的 Series.str.contains函数
    一:基础的函数组成’’‘Series.str.contains(pat,case=True,flags=0,na=nan,regex=True)’’'测试pattern或regex是否包含在Series或Index的字符串中。返回布尔值系列......
  • 闭区间可导函数在在两个端点处连续的证明
    如果一个函数在闭区间\([a,b]\)内可导,那么首先\(f^{'}\)在区间\((a,b)\)任意一点都存在,且如下两个极限存在\[\lim_{h\rightarrow0^+}\frac{f(a+h)-f(a)}{h}\\\lim_{h......
  • 进程控制之wait函数
    一、绪论一个进程在终止时会关闭所有文件描述符,释放在用户空间分配的内存,但它的PCB还保留着,内核在其中保存了一些信息:如果是正常终止则保存着退出状态,如果是异常终止则......
  • 进程控制之exec函数族
     一、引言进程通过exec函数根据指定的文件名或目录名执行另一个可执行文件,当进程调用exec函数时,该进程的数据段、代码段和堆栈段完全被新程序替换,从新程序的启动例程开始......
  • c++中调用QML中的函数和设置QML中的属性的问题
    1.这里主要是介绍,如何在c++中调用QML中的函数和设置QML中的属性的问题  2.具体代码    //UICtest.qmlimportQt4.7Rectangle{   id:mainWid......
  • kotlin的拓展函数和原理
    kotlin的拓展函数和原理问题背景kotlin的使用过程中有个拓展函数的概念,这个概念在java中是没有的,那么问题来了,kotlin中拓展函数是什么呢?拓展函数的概念:不改变原有类的情......
  • inline内联函数详解
    这几天看题解一直遇到inline所以学习总结一下1、C++inline内联函数(1)引入inline关键字的原因:在c/c++中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入......