• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
smileyqp
https://github.com/smileyqp
博客园    首页    新随笔    联系   管理    订阅  订阅

(六)js的arguments

  • arguments保存传入函数的所有参数
  • arguments是类数组对象,除length和索引(索引从0开始)之外无其他Array属性
  • arguments对象是所有(非箭头)函数中都可用的局部变量
  • 可以转化成一个真正的Array
var args = Array.prototype.slice.call(arguments);
var args = [].slice.call(arguments);

// ES2015
const args = Array.from(arguments);
const args = [...arguments];
  • arguments.callee指向当前执行的函数
  • 严格模式下,剩余参数、默认参数和解构赋值参数的存在不会改变 arguments对象的行为
  • 非严格模式中的函数没有剩余参数、默认参数和解构赋值,那么arguments对象中的值会跟踪参数的值(反之亦然)
//ex1
function func(a) { 
  arguments[0] = 99;   // 更新了arguments[0] 同样更新了a
  console.log(a);
}
func(10); // 99

//ex2
function func(a) { 
  a = 99;              // 更新了a 同样更新了arguments[0] 
  console.log(arguments[0]);
}
func(10); // 99

  • 非严格模式中;函数包含剩余参数、默认参数和解构赋值,那么arguments对象中的值不会跟踪参数的值(反之亦然)
//ex1:包含解构赋值的默认值覆盖
function func(a = 55) { 
  arguments[0] = 99; // updating arguments[0] does not also update a
  console.log(a);
}
func(10); // 10

//ex2:
function func(a = 55) { 
  a = 99; // updating a does not also update arguments[0]
  console.log(arguments[0]);
}
func(10); // 10

//ex3:
function func(a = 55) { 
  console.log(arguments[0]);
}
func(); // undefined
posted @ 2019-09-02 11:49  smileyqp  阅读(105)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3