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

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

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

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

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

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

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

默认值为变量:

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

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

默认值为函数:

function testfn(){
return 'test'
}
function fn(a, b=testfn()){
console.log(a)
console.log(b)
}
fn(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)
//
//

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

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

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

es6和es5函数参数和arguments的差别的更多相关文章

  1. jacascript 函数参数与 arguments 对象

    前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! 调用函数时,实参和形参需要一一对应,但如果参数多了的话,会很苦恼: 我们可以用键值对(字面量对象)的方式传 ...

  2. ES6之函数参数

    ES6中对于函数参数主要增加了以下内容: 1.参数的扩展/数组的展开: 2.默认参数. 什么是参数的扩展? 看下面代码: <!DOCTYPE html> <html lang=&qu ...

  3. [js高手之路] es6系列教程 - 函数的默认参数详解

    在ES6之前,我们一般用短路表达式处理默认参数 function show( a, b ){ var a = a || 10; var b = b || 20; console.log( a, b ) ...

  4. ES6 函数参数的默认值

    基本用法 在ES6之前,不能直接为函数的参数指定默认值,只能采取变通的方法. function log(x,y){ y = y||'world'; console.log(x,y); } log('k ...

  5. es6的箭头函数和es5的function函数区别

    一.es6的箭头函数es6箭头函数内部没有this,使用时会上朔寻找最近的this不可以做构造函数,不能使用new命令,因为没有this函数体内没有arguments,可以使用rest参数代替不能用y ...

  6. 传递给函数的隐含参数:arguments及递归函数的实现

    传递给函数的隐含参数:arguments当进行函数调用时,除了指定的参数外,还创建一个隐含的对象——arguments.arguments是一个类似数组但不是数组的对象,说它类似是因为它具有数组一样的 ...

  7. JS函数的参数对象arguments在严格模式下的限制

    在JS中,传入的函数的参数个数可以与定义函数的个数不一致,那么对于传入的实参的引用,则是arguments对象.然而改对象在严格模式和非严格模式下是由区分的: 1 在严格模式下arguments作为了 ...

  8. JavaScript的作用;JS常见的三种对话框;==和===的区别;函数内部参数数组arguments在函数内部打印实参;JS的误区:没有块级作用域

    JS:客户端(浏览器)脚本语言 弱类型 基于原型 事件驱动 不需要编译(直接运行)   JS的作用:表单验证,减轻服务端的压力 添加页面动画效果  动态更改页面内容  Ajax网络请求 (一)常见的对 ...

  9. ES6学习 --函数参数默认值与解构赋值默认值

    1. ES6的解构ES6中引入了解构赋值的操作,其作用是:将值从数组Array或属性从对象Object提取到不同的变量中 即分为两种情况:从数组Array中解构,以及从对象Object中解构 ①.从数 ...

随机推荐

  1. 何为KVM克隆和快照

    KVM的克隆.快照都是老生常谈的问题,资料也非常多,这里只是针对个人实验的记录,方便以后查阅. 虚拟机克隆 虚拟机的克隆操作是再频繁不过了,安装好第一台虚拟机后就可以进行基础设置,已此虚拟机为模板,以 ...

  2. English--音标重难点

    English|音标重难点 在拥有了,音标的元音与辅音的基础之后,需要对于这些音标进行加以区分,毕竟方言对于口型的影响非常的大. 前言 目前所有的文章思想格式都是:知识+情感. 知识:对于所有的知识点 ...

  3. 【转载】C#的ArrayList使用IndexOf方法查找第一个符合条件的元素位置

    在C#的编程开发中,ArrayList集合是一个常用的非泛型类集合,在ArrayList集合中如果需要查找第一个符合条件的元素所在的位置,可以使用ArrayList集合的IndexOf方法,Index ...

  4. electron项目中使用js web worker时,new worker(path)路径问题

    如题,在new worker时需要传入js文件路径,可是在electron环境中使用出现问.同目录下,recorder.jsworker.js recorder.js中调用 var path = '. ...

  5. VS Code如何在浏览器中打开Html文件?

    1.首先打开扩展 “ 文件 → 首选项 → 按键映射扩展” 快捷键:[ Ctrl+K Ctrl+M ] 2.在出现的窗口输入“open in browser”,安装 3.打开Html文件 Alt+B: ...

  6. mangodb之save与insert区别

    save:未指定 _id 参数 插入成功,自动生成_id指定 _id 但 _id 对应的记录不存在 插入成功,_id不变指定 _id 但 _id 对应的记录存在 根据_id,更新记录 insert: ...

  7. Node.js自动本地重启服务器

    node.js在本地项目中,更新 了代码 是不会自动刷新 的,要重启才能生效,每次更改代码又手动重启这样很麻烦. 可以安装 个supervisor.全局安装supervisor npm install ...

  8. 我是这样手写Spring的,麻雀虽小五脏俱全

    人见人爱的Spring已然不仅仅只是一个框架了.如今,Spring已然成为了一个生态.但深入了解Spring的却寥寥无几.这里,我带大家一起来看看,我是如何手写Spring的.我将结合对Spring十 ...

  9. Django框架(十)--常用字段、参数、元信息、多对多关联关系

    一.ORM字段 # AutoField() int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列 # IntegerField() ...

  10. IE浏览器下AJAX缓存问题导致数据不更新的解决办法

    一直知道使用ajax的时候,有的时候会出现数据缓存的问题,当时也没有深究,就是所有的简单粗暴的全部加上cache:false,或者使用在url处加上随机时间函数 今天无意间看见了为什么会出现缓存的原因 ...