arguments的介绍(一)
arguments 是一个类数组对象。代表传给一个function的参数列表。
1.1 arguments length
arguments 是个类数组对象,其包含一个 length 属性,可以用 arguments.length 来获得传入函数的参数个数。
function func() {
console.log("The number of parameters is " + arguments.length);
}
func();
func(1, 2);
func(1, 2, 3);
执行结果如下:
The number of parameters is 0
The number of parameters is 2
The number of parameters is 3
1.2 arguments 转数组
通常使用下面的方法来将 arguments 转换成数组:
Array.prototype.slice.call(arguments);
[].slice.call(arguments);
1.3 leaking arguments
另外,有一个需要注意的地方就是,不能将函数的 arguments 泄露或者传递出去。什么意思呢?看下面的几个泄露 arguments 的例子:
// Leaking arguments example1:
function getArgs() {
return arguments;
} // Leaking arguments example2:
function getArgs() {
const args = [].slice.call(arguments);
return args;
} // Leaking arguments example3:
function getArgs() {
const args = arguments;
return function() {
return args;
};
}
上面的做法就直接将函数的 arguments 对象泄露出去了,最终的结果就是 V8 引擎将会跳过优化,导致相当大的性能损失。
可以这样做:
function getArgs3 () {
const args = new Array(arguments.length)
for (let i = 0; i < args.length; i++) {
args[i] = arguments[i]
}
return args;
}
1.4 修改arguments的值
// 修改arguments的值
function foo(a) {
"use strict";
console.log(a, arguments[0]); // 1 1
a = 10;
console.log(a, arguments[0]); // 10 1
arguments[0] = 20;
console.log(a, arguments[0]); // 10 20
}
foo(1);
function bar(a) {
console.log('-----非严格模式下的值变化------')
console.log(a, arguments[0]); // 1 1
a = 10;
console.log(a, arguments[0]); // 10 10
arguments[0] = 20;
console.log(a, arguments[0]); // 20 20
}
bar(1);
从上面的两个例子中可以看出,在严格模式下,函数中的参数与 arguments 对象没有联系,修改一个值不会改变另一个值。而在非严格模式下,两个会互相影响。
arguments的介绍(一)的更多相关文章
- JavaScript函数的柯里化(currying)
转载请注明出处:http://www.cnblogs.com/shamoyuu/p/currying.html 什么是js函数的currying /柯里化? 说到js的柯里化,相信很多朋友都会头大.或 ...
- 前端入门12-JavaScript语法之函数
声明 本系列文章内容全部梳理自以下几个来源: <JavaScript权威指南> MDN web docs Github:smyhvae/web Github:goddyZhao/Trans ...
- 【转】JavaScript里Function函数实现可变参数
转载: http://www.oschina.net/question/54100_15938 使用javascript类库函数时,经常会遇到一个函数,可以使用不同个数的参数的情况 比如:exp(v ...
- 2019前端面试系列——JS高频手写代码题
实现 new 方法 /* * 1.创建一个空对象 * 2.链接到原型 * 3.绑定this值 * 4.返回新对象 */ // 第一种实现 function createNew() { let obj ...
- CodeIgniter安装和入门使用(一)
CodeIgniter是个轻量级功能也强大的框架,适合做自己做小项目用,本文介绍CodeIgniter的安装和使用.安装 官网链接http://codeigniter.org.cn/user_guid ...
- python 格式化输出详解(占位符:%、format、f表达式)——上篇 理论篇
0 - 占位符介绍 要实现字符串的拼接,使用占位符是的一种高效.常用的方式. 举个例子,下面是不使用占位符的一种写法,直接使用加号拼接字符串 name = "Li hua" age ...
- 【转】JavaScript 之arguments、caller 和 callee 介绍
1.前言 arguments, caller , callee 是什么? 在JavaScript 中有什么样的作用?本篇会对于此做一些基本介绍. 本文转载自:http://blog.csdn.ne ...
- python 全栈开发,Day51(常用内置对象,函数,伪数组 arguments,关于DOM的事件操作,DOM介绍)
昨日内容回顾 1.三种引入方式 1.行内js <div onclick = 'add(3,4)'></div> //声明一个函数 function add(a,b){ } 2. ...
- JavaScript 之arguments、caller 和 callee 介绍
1.前言 arguments, caller , callee 是什么? 在javascript 中有什么样的作用?本篇会对于此做一些基本介绍. 2. arguments arguments: ...
随机推荐
- 剑指offer——34之字打印二叉树
题目描述 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 题解: 与上道题没区别,就是在存入数据时 ...
- 为什么 TCP 建立连接是三次握手,关闭连接确是四次挥手呢?
Java技术栈 www.javastack.cn 优秀的Java技术公众号 作者:小书go https://blog.csdn.net/qzcsu/article/details/72861891 背 ...
- sails中创建和使用services
从sails官方在线文档查知 // EmailService.js - in api/services module.exports = { sendInviteEmail: function(opt ...
- 关于a[::-1]
b = a[i:j] 表示复制a[i]到a[j-1],以生成新的list对象,a[:]就相当于完整复制一份a b = a[i:j:s]表示:i,j与上面的一样,但s表示步进,缺省为1.即从i到j每 ...
- 大道浮屠诀---cwRsync同步工具的使用
目的: 在日常生活中,我们有时候会遇到这样类似的问题 ---需要把一台服务器上的某个重要的文件进行备份(拷贝另外的服务器上) ---需要同步系统上的配置文件到其他系统 利用此cwRsync软件可以解决 ...
- 调用存储过程取到数据通过NPOI存到Excel中
//调用 public ActionResult GenerateExcel() { DataTable headerTable = new DataTable(); ...
- 随笔-ansible-1
系统下所有的操作,从运维操作角度划分为两类: 1.文件传输 2.命令执行 系统下所有的操作,从自动化工作类型角度划分为: 1.应用部署 2.配置管理 3.任务流编排 使用root生成默认的秘钥对: # ...
- sql 循环执行游标
---定义开始和结束时间 declare @st_dt datetime declare @en_dt datetime ---时间赋值 ' ' ---定义中间变量 declare @dt datet ...
- Android开发 ImageView开发记录
改变图片的着色 默认是这个方法 /** * 为图像设置着色选项. Assumes * {@link PorterDuff.Mode#SRC_ATOP} blending mode. * * @para ...
- Altera: set pin locations using tcl
1, compile the project; 2, store current tcl settings: Project –> Generate Tcl File from Project- ...