首页 > 其他分享 >UES-03-函数

UES-03-函数

时间:2024-04-28 20:11:39浏览次数:22  
标签:03 调用 函数 箭头 参数 new 默认值 UES

带参数默认值的函数

函数的参数数量不受声明时指定的参数个数影响,可以有任意多个。

函数声明时使用参数默认值直接在形参后面添加 '= defaultValue' 即可。可以给任意位置的参数添加默认值,只有当没有给这个位置的参数传值或者传的值为 undefined 时该参数使用默认值。

在使用参数默认值时,该位置的值不会存储在 arguments 对象中,同时 arguments 对象只存储调用函数时传递的值,当在函数内部改变参数的值时,arguments 对象中的值不变,依然是传递给函数的值。

参数默认值可以是字面量、变量、表达式或者返回值的函数。当调用函数且没有传值给具有默认值的参数时,此时对应参数使用默认值。默认值为有返回值的函数时,仅当需要默认值时,才会调用该函数产生值。也可以将函数前面的参数作为后面参数的默认值,反之不行。原因是当调用函数时,函数参数是按照声明顺序进行初始化的,如果用后面的参数作为前面参数的默认值,前面的参数使用默认值初始化时,后面的参数还没有值,无法初始化。

不具名参数

剩余参数由 '...' 紧跟一个参数名表示,这个参数接收由剩余参数组成的数组。剩余参数必须位于函数声明中最后一个参数位置上,且只能有一个。另外,剩余参数不能在对象字面量的 setter 属性中使用。

arguments 对象存储调用函数时传递给函数的所有参数。

函数构造器

函数构造器 Function 创建并返回一个函数,传递给构造器的参数都是字符串,其中除了最后一个参数都是创建的新函数的参数,最后一个参数是新函数的执行语句。可以在函数构造器中使用默认参数值和剩余参数,用法与前述一致。为参数添加等于号和默认值,在函数的最后一个参数前面添加三个点。

扩展运算符

扩展运算符 '...' 放在数组名前面使用时会拆解该数组,数组的每个元素作为一个参数,需要将数组中的元素作为参数传递给函数时使用。

名称属性

所有函数都有一个 name 属性存储函数的名称。即使是匿名函数,也保存了引用该函数的变量名称。

一个变量引用一个具名函数时,变量的 name 属性存储的是函数声明时的名称。getter 和 setter 函数的 name 属性存储的名称为 'get [funName]' 和 'set [funName]'; bind() 方法创建的函数 name 属性为 'bound [funName]';使用 Function 创建的函数 name 属性为 'anonymous [funName]'。

name 属性主要用于调试。

函数的双重用途

函数有两个内部方法 [[Call]] 和 [[Construct]]。没有使用 new 调用函数时,执行 [[call]] 方法,执行的是函数体;使用 new 调用函数时,执行 [[Construct]] 方法,此时创建一个新对象并将该对象赋值给 this 去执行函数体。具有 [[Construct]] 方法的函数称为构造器。

元属性是指对象实例不具有的属性。当 [[Construct]] 方法被调用时,new.target 元属性存放 new 操作符作用的目标,一般为构造对象的构造器。当 [[Call]] 方法被调用时,new.target 的值为 undefined。通过判断 new.target 的值可以确定函数是否使用了 new 调用。只能在函数内部使用 new.target。

块级函数

严格模式下,在某个代码块内部任意位置定义一个函数,允许使用这个函数的范围为从这个代码块的起始位置直到代码块结束。

非严格模式下,在某个代码块内部任意位置定义一个函数,允许访问这个函数的范围要么是某个函数的作用域要么是全局作用域。

箭头函数

箭头函数的箭头左边可以没有参数、有一个参数、多个参数,此时用小括号、单个参数、用小括号括起来的逗号分隔的多个参数表示。箭头右边可以为空、一个表达式、多条语句,此时用空大括号、一个表达式、普通函数的函数体表示。若只有一个表达式,则箭头函数返回该表达式的值。如果箭头函数使用一个表达式返回一个对象字面量,则该对象字面量需要使用小括号括起来。

立即调用箭头函数的表达式为:'(() => {})();'。

箭头函数中的 this 根据作用域链查找确定,要么指某个对象要么指全局对象。不能使用 new 调用箭头函数,有 name 属性,this 值不能变更。

箭头函数没有自己的 arguments 对象,但是可以访问包含自身的函数的 arguments 对象。

尾调用优化

尾调用指在一个函数中最后一条语句调用了另一个函数。一般情况下需要新增一个栈帧来保存新函数的变量。在严格模式下,满足如下条件时,尾调用优化会清除当前函数使用的栈帧重复利用该空间。

  • 尾调用不能引用当前栈帧中的变量。
  • 进行尾调用的函数在尾调用返回结果后不能做额外操作。
  • 尾调用的结果作为当前函数的结果返回。

参考

[1] Zakas, Understanding ECMAScript 6, 2017.

标签:03,调用,函数,箭头,参数,new,默认值,UES
From: https://www.cnblogs.com/xdreamc/p/16526744.html

相关文章

  • MySQL函数详解
     CONCAT()用途:连接两个或多个字符串。示例:sql`SELECTCONCAT('Hello','','World')ASGreeting;` 这将返回 'HelloWorld'。LOWER()和UPPER()用途:将字符串转换为小写或大写。示例:sql`SELECTLOWER('HELLO')ASLowercase,UPPER(&#......
  • [转]<a>标签超链接跳转到第三方系统提示:The Http request is not acceptable for the
    原文地址:TheHttprequestisnotacceptablefortherequestedresource.-CSDN博客1.问题描述在做一个点击本系统的一个按钮打开第三方链接并跳转新页面,跳转过去的第三方链接由https://ip地址组成,报以下错:TheHttprequestisnotacceptablefortherequestedresource.2.......
  • 最近常用的几个【行操作】的Pandas函数
    最近在做交易数据的统计分析时,多次用到数据行之间的一些操作,对于其中的细节,简单做了个笔记。1.shfit函数shift函数在策略回测代码中经常出现,计算交易信号,持仓信号以及资金曲线时都有涉及。这个函数的主要作用是将某列的值上下移动。默认情况下,shift函数是向下移动一行,移动后,新......
  • idea启动项目时抛出错误信息Error running 'XXXApplication' Error running XXXApplic
    很多新手小白在启动项目时会出现下面问题,不知道怎么办出现的问题:启动项目时抛出下图错误提示:Errorrunning'XXXApplication'ErrorrunningXXXApplication.Commandlineistoolong.Shortenthecommandlineandrerun. 解决办法:1、直接点击下图位置,进入EditRunConfi......
  • 01-linu核心基础-03操作系统基础
    在PC领域,苹果在2005年之前采用IBMPowerPC芯片,从2005-2020年采用Intelx86芯片,最近则新发布了苹果M1芯片。M1是一款基于ARM架构的苹果自研芯片。本文简单介绍苹果M1芯片及新产品布局对ARM生态影响windwos电脑是x86架构的Macosm芯片是基于arm架构的GPU(GraphicsProcessingUn......
  • openGauss 时间-日期函数和操作符
    时间/日期函数和操作符时间日期操作符警告:用户在使用时间和日期操作符时,对应的操作数请使用明确的类型前缀修饰,以确保数据库在解析操作数的时候能够与用户预期一致,不会产生用户非预期的结果。比如下面示例没有明确数据类型就会出现异常错误。SELECTdate'2001-10-01'-'7......
  • [Err]1114 The table 'xxx' is full 的解决办法
    错误信息[ERR]1114-Thetable'th_exam_paper'isfull解决步骤查看服务器硬盘使用情况df-h数据库所在位置空间已经百分之一百,准备迁移数据库文件迁移mysql数据库文件到挂载盘要将MySQL数据库文件迁移到其他挂载盘,你需要做的是将数据文件复制到新位置,并更新MyS......
  • 一文看懂什么是回调函数
    文章目录一、什么是回调函数二、回调示例三、回调函数的应用场景四、回调函数的优点五、回调函数的注意事项一、什么是回调函数回调函数是一种在编程中常见的概念,它是指一个函数作为参数传递给另一个函数,并且在特定事件发生或条件满足时被调用执行的函数。二、回调示例举......
  • SpringMVC(1)-@RequestMapping的简单使用
    本文核心内容来自于韩顺平老师的课程@RequestMapping注解可以用来指定控制器或者处理器的某个方法的请求url@ControllerpublicclassUserServlet{@RequestMapping("/login")publicStringlogin(){return"login";}}1@RequestMappi......
  • 实验3 C语言函数应用编程
    #include<stdio.h>#include<stdlib.h>#include<time.h>#include<windows.h>#defineN80voidprint_text(intline,intcol,chartext[]);voidprint_spaces(intn);voidprint_blank_lines(intn);intmain(){ intline,col,i;......