当前位置: 首页 > news >正文

es6和es5函数参数和arguments的差别

注: 这里说的 es5 代表的都是非严格模式下。

 

es6之前函数的参数不能传默认值:

function fn(a, b){
    console.log(a)
    console.log(b)
}
fn(2)
// 2
// undefined

如果调用函数的时候传不传入对应的参数,则参数的值为 undefined。

 

 

es6中查参数可以设置默认值,且默认值可以是任何类型(变量,数字、函数等)。

 

默认值为数字、字符串等非函数和变量:

function fn(a, b=3){
    console.log(a)
    console.log(b)
}

fn(2)
// 2
// 3

 

默认值为变量:

let d = 5;
function fn(a, b=a, c=d){
    console.log(a)
    cosnole.log(b)
    cosnole.log(c)
}
fn(2)
// 2
// 2
// 5

注意:默认值是变量且变量也是当前函数的参数的话,不能将后面的变量赋值给前面的参数当默认值,如上面代码,能将参数 a 赋值给 b ,但是不能将 b 赋值给 a 。

 

 

默认值为函数:

function testfn(){
    return 'test'
}
function fn(a, b=testfn()){
    console.log(a)
    console.log(b)
}
fn(2)
// 2
// test

注意,默认值如果是函数的话,只有在调用 fn 函数,且未传值的时候,才会调用。

 

 

es6和es5函数 arguments 的差别:

arguments 是函数传入的实参,在es6中,如果函数有设置默认值,那么修改参数变量的值,不会影响 arguments 里面值,如:

function fn(a, b=5){
    a = 3;
    console.log(a)
    console.log(arguments[0])
}
fn(2)
// 3
// 2

这里,我在函数内部将参数 a 的值改成了 3,但是arguments[0] 的值还是传入的2。

 

如果定义函数的时候,没有设置默认值,那么修改参数的值会导致 arguments 里面的值同步被修改,如:

function fn(a, b){
    a = 3;
    console.log(a)
    console.log(arguments[0])
}
fn(2)
// 3
// 3

 

转载于:https://www.cnblogs.com/ayseeing/p/11596182.html

相关文章:

  • 响应式设计(Response Web Design)浅谈
  • 查询 ip占用导致ip不通的 问题 查IP对应的mac地址
  • 删除MyEclipse 6.5.1自带的Maven4MyEclipse
  • ulimt 和 sysctl
  • linux /etc/profile bashrc bash_profile
  • 多服务器的日志合并统计——apache日志的cronolog轮循
  • systemctl daemon-reload
  • Unicast
  • souce and bash 的区别
  • php.ini设置详解(转)
  • sersync+rsync实现实时同步
  • open cv图像矩阵的掩膜操作
  • open cvMat的使用
  • open cv像素的操作
  • 一个简单的Spring Web Service示例
  • $translatePartialLoader加载失败及解决方式
  • Angular数据绑定机制
  • Java知识点总结(JavaIO-打印流)
  • sessionStorage和localStorage
  • Twitter赢在开放,三年创造奇迹
  • VUE es6技巧写法(持续更新中~~~)
  • windows下mongoDB的环境配置
  • 多线程事务回滚
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 容器服务kubernetes弹性伸缩高级用法
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 小程序测试方案初探
  • 一道面试题引发的“血案”
  • 再谈express与koa的对比
  • - 转 Ext2.0 form使用实例
  • mysql面试题分组并合并列
  • zabbix3.2监控linux磁盘IO
  • # 安徽锐锋科技IDMS系统简介
  • #include<初见C语言之指针(5)>
  • #LLM入门|Prompt#2.3_对查询任务进行分类|意图分析_Classification
  • #QT(一种朴素的计算器实现方法)
  • #stm32整理(一)flash读写
  • (1)安装hadoop之虚拟机准备(配置IP与主机名)
  • (2)STM32单片机上位机
  • (function(){})()的分步解析
  • (ZT)一个美国文科博士的YardLife
  • (附源码)ssm本科教学合格评估管理系统 毕业设计 180916
  • (数据结构)顺序表的定义
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .dwp和.webpart的区别
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .NET MVC第三章、三种传值方式
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .net操作Excel出错解决
  • /var/spool/postfix/maildrop 下有大量文件
  • ??eclipse的安装配置问题!??
  • []常用AT命令解释()