浅谈[].slice.call(arguments, 1)
今天在跟踪调试项目的代码时,发现在一个function中用到了这么一段[].slice.call(arguments, 1) 的代码。心中便起了疑惑,对于slice 和 call 的方法,倒是不怎么陌生,解析了下上面的那段代码,就是为了获取arguments 从1 开始到结尾的所有元素。只是觉得奇怪为什么不直接用 arguments.slice(1) 这样去使用呢?(PS:JS当初是啃了《JavaScript权威指南》,可是后面也没有怎么深入去用,最近转来开发HTML5 Game 时,才发现好多基础的东西都忘记的差不多了,汗!!!)。于是,就自己先做了下面的测试:
测试1 先打印下 arguments
var a = function(f){
console.log(arguments);
}
a('show', [,,,]);
结果:['show', Array[4]]
测试2
var a = function(f){
console.log([].slice.call(arguments, ));
}
a('show', [,,,]);
结果:[Array[4]]
测试3
var a = function(f){
console.log(arguments.slice());
}
a('show', [,,,]);
结果:报错!!! **arguments.slice is not a function(...)**
此时就心中产生了疑惑了,为啥在测试一中打印出来的arguments 是个数组的东西啊,为啥会提示没有slice这个方法呢?带着疑问我去请教下了队伍里的大牛,得到了下面的答案:
测试4
(function() {
console.log(arguments instanceof Array)
})();
结果:false
arguments 并非数组,只是访问单个参数的方式与访问数组元素的方式相同。因此在使用slice方法的时候,需要用类似[].slice.call(arguments, 1) 的这种方式去调用,至此,关于这条语句引发的思考也就此结束了
.
浅谈[].slice.call(arguments, 1)的更多相关文章
- 浅谈JS的arguments对象
在JavaScript中,arguments属于当前对象的一个内置属性,arguments非常类似于Array对象,但是又不是实例的Array.比如: Array.prototype.testArg ...
- 浅谈arguments与arguments的妙用
1.每个函数都有一个arguments属性,表示函数的实参集合,这里的实参是重点,就是执行函数时实际传入的参数的集合. 2.arguments不是数组而是一个对象,但它和数组很相似,所以通常称为类数组 ...
- 【微信小程序项目实践总结】30分钟从陌生到熟悉 web app 、native app、hybrid app比较 30分钟ES6从陌生到熟悉 【原创】浅谈内存泄露 HTML5 五子棋 - JS/Canvas 游戏 meta 详解,html5 meta 标签日常设置 C#中回滚TransactionScope的使用方法和原理
[微信小程序项目实践总结]30分钟从陌生到熟悉 前言 我们之前对小程序做了基本学习: 1. 微信小程序开发07-列表页面怎么做 2. 微信小程序开发06-一个业务页面的完成 3. 微信小程序开发05- ...
- 浅谈HTML5单页面架构(二)——backbone + requirejs + zepto + underscore
本文转载自:http://www.cnblogs.com/kenkofox/p/4648472.html 上一篇<浅谈HTML5单页面架构(一)--requirejs + angular + a ...
- 浅谈javascript函数节流
浅谈javascript函数节流 什么是函数节流? 函数节流简单的来说就是不想让该函数在很短的时间内连续被调用,比如我们最常见的是窗口缩放的时候,经常会执行一些其他的操作函数,比如发一个ajax请求等 ...
- 浅谈JavaScript中的闭包
浅谈JavaScript中的闭包 在JavaScript中,闭包是指这样一个函数:它有权访问另一个函数作用域中的变量. 创建一个闭包的常用的方式:在一个函数内部创建另一个函数. 比如: functio ...
- javascript数组浅谈2
上次说了数组元素的增删,的这次说说数组的一些操作方法 join()方法: ,,] arr.join("_") //1_2_3 join方法会返回一个由数组中每个值的字符串形式拼接而 ...
- 【javascript】浅谈javaScript的深拷贝
前言: 最开始意识到深拷贝的重要性是在我使用redux的时候(react + redux), redux的机制要求在reducer中必须返回一个新的对象,而不能对原来的对象做改动,事实上,当时 ...
- 视频基础知识:浅谈视频会议中H.264编码标准的技术发展
浅谈视频会议中H.264编码标准的技术发展 浅谈视频会议中H.264编码标准的技术发展 数字视频技术广泛应用于通信.计算机.广播电视等领域,带来了会议电视.可视电话及数字电视.媒体存储等一系列应用,促 ...
随机推荐
- Jupyter Notebooks的安装和使用介绍
最近又开始重新学习Python,学习中使用到了一款编辑器Jupyter Notebooks ,非常想安利给初学python的同学.注:本文内容仅针对windows环境下安装和配置Jupyter Not ...
- Linux和Windows的区别
1. 软件与支持 • Windows 平台:数量和质量的优势,不过大部分为收费软件:由微软官方提供重要支持和服务: • Linux 平台:大都为开源自由软件,用户可以修改定制和再发布,由于基本免费没有 ...
- CCSpriteFrameCache的使用
配置环境:win7+Cocos2d-x.2.0.3+VS2012 CCSpriteFrameCache是帧缓存类. 通过plist文件导入图片 CCSpriteFrameCache::sharedSp ...
- 团队项目-Alpha版本发布2
这个作业属于哪个课程 课程的链接 这个作业的要求在哪里 作业要求的链接 团队名称 西柚三剑客 这个作业的目标 -Alpha2版本发布说明,给出测试报告,并进行总结 1. 团队成员的学号列表 团队成员 ...
- JVM-3-JVM内存结构
JVM内存结构可以大致可划分为线程私有区域和共享区域, 线程私有区域由虚拟机栈.本地方法栈.程序计数器组成,而共享区域由堆.元数据空间(方法区)组成.
- <Design> 359 346
359. Logger Rate Limiter 用map搭建. class Logger { HashMap<String, Integer> map; /** Initialize y ...
- 去掉Oracle数据库中字段值前后空格
发现oracle字段钟包含了空格,可能是前空格,也可能是后空格,因为是历史数据,需要特殊处理.但是中间的空格可能是一些特殊人员的姓名含有,这种情况不能处理.所以我们只需要处理前后空格即可.使用如下sq ...
- 简单的Python GUI界面框架
Python开发GUI界面, 可以使用pyQT或者wxpython. 不过不论pyQT还是wxpython都需要比较多的学习成本.Python工程往往是用于快速开发的,有些时候引入pyQT,wxpyt ...
- bootstrap 输入框后面有个按钮
效果如下: 实现代码:
- pandas 学习 第5篇:DataFrame - 访问数据框
数据框是用于存储数据的二维结构,分为行和列,一行和一列的交叉位置是一个cell,该cell的位置是由行索引和列索引共同确定的.可以通过at/iat,或loc/iloc属性来访问数据框的元素,该属性后跟 ...