今天在跟踪调试项目的代码时,发现在一个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) 的这种方式去调用,至此,关于这条语句引发的思考也就此结束了

.

最新文章

  1. Minimum Depth of Binary Tree [LeetCode]
  2. git的合并与推送
  3. Android ListView自定义Adapter使用误区
  4. 禁用缓存的过滤器Filter
  5. (转)汇编bne的问题
  6. c#SocketIO4NetClient访问node js
  7. POJ2155:Matrix(二维树状数组,经典)
  8. 清理我的 Mac
  9. Python3+迭代器与生成器
  10. c语言基础学习09_关于复合类型的复习
  11. php中HTTP_X_FORWARDED_FOR 和 REMOTE_ADDR的使用
  12. Python爬虫入门教程 51-100 Python3爬虫通过m3u8文件下载ts视频-Python爬虫6操作
  13. Spring Boot 系列(九)数据层-集成Spring-data-jpa
  14. Js -----后台json数据,前端生成下载text文件
  15. 【学习博客】Python学习初体验
  16. Python解决乱码问题
  17. Feign请求中报错:Request header is too large 的解决方案。
  18. JUC集合之 ConcurrentLinkedQueue
  19. TP 等框架在配置虚拟主机伪静态注意事项
  20. WinForm界面开发之 启动界面

热门文章

  1. 微信小程序通过getPhoneNumber后台PHP解密获取用户手机号码
  2. [Linux]线程分离状态的理解
  3. Less(4)
  4. Leetcode103_Binary-tree-zigzag-level-order-traversal
  5. Java多态的总结
  6. Django restful framework中自动生成API文档
  7. IT兄弟连 Java语法教程 流程控制语句 控制循环结构3
  8. [LeetCode#184]Department Highest Salary
  9. 英语阅读——A meaningful life
  10. C++ 运行时类别识别