博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
es6和es5函数参数和arguments的差别
阅读量:4681 次
发布时间:2019-06-09

本文共 1077 字,大约阅读时间需要 3 分钟。

注: 这里说的 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

你可能感兴趣的文章
LeetCode:平衡二叉树【110】
查看>>
01 操作系统和常用命令
查看>>
Mysql扩展之replication概述
查看>>
C++中数值的后缀
查看>>
EventModify
查看>>
C中int8_t、int16_t、int32_t、int64_t、uint8_t、size_t、ssize_t区别
查看>>
python day2 模块初识、pyc定义
查看>>
一道算法作业题(续)
查看>>
Machine Learning From Scratch-从头开始机器学习
查看>>
基础数据结构
查看>>
python url库学习
查看>>
找“水王”
查看>>
018-伸展树
查看>>
FPM打包工具
查看>>
JDK版本不兼容问题之:一台机器安装多个版本的JDK
查看>>
20145302张薇《Java程序设计》第八周学习总结
查看>>
Log4net的配置-按照日期+文件大小混合分割
查看>>
const char*、char*、char* const、char[]、string的区别
查看>>
SQL学习笔记:基础SQL语句
查看>>
python管理网络设备的一些模块
查看>>