关于这3个货,网上有很多文章介绍,我这边还是记录下并加上自己的理解,还有arguments函数内置对象顺便也记录下:

简单的说apply和call 会绑定第一个参数的作用域给调用函数对象实例,并会执行调用函数,还可以传参数

apply 第二个参数是数组,call 是可变长度参数

apply、call:

例子来个:

function x(t,v){
console.log(this.id);
if(t){
console.log(t);
}
if(v){
console.log(v);
}
} var id = '我是外部ID'; var obj = { id:'我是内部obj的ID' } x(); //我是外部ID x.apply(obj); // 我是内部obj的ID x.call(obj); // 我是内部obj的ID x.apply(obj,['test']);
// 我是内部obj的ID
// test x.call(obj,'test','test2');
// 我是内部obj的ID
// test
// test2

是不是一下就明白了。

bind:

bind同样会绑定,也会穿参数,但是不会立即执行

x.bind(obj)() ; // 我是内部obj的ID

var x_copy = x.bind(obj);
x_copy();//我是内部obj的ID

arguments:

类似数组,但不是真的数组,好吧,就把它当成数组吧,它同样拥有length 而且也可以通过下标访问:

function x(){
console.log(arguments.length); var j = 0;
for(let i=0;i<arguments.length;i++){
j += arguments[i];
} console.log('[j >>]',j);
} ; x();
//
// [j >>] undefined x(1);
//
// [j >>] 1 x(1,2);
//
// [j >>] 3

关于arguments.callee():

下面的官方语言:
警告:严格模式下,第5版 ECMAScript (ES5) 禁止使用 arguments.callee()。当一个函数必须调用自身的时候, 避免使用 arguments.callee(), 通过要么给函数表达式一个名字,要么使用一个函数声明.

不多写,有兴趣的可以去这看看

arguments.callee

如果需要调用自身可以使用函数表达式(下面是官方的例子):

[1,2,3,4,5].map(function factorial (n) {
return !(n > 1) ? 1 : factorial(n-1)*n;
});
  • 该函数可以像代码内部的任何其他函数一样被调用
  • 它不会在外部作用域中创建一个变量 (除了 IE 8 及以下)
  • 它具有比访问arguments对象更好的性能

总之,官方都废弃了,你还执着啥?

最新文章

  1. Hive tuning tips
  2. 身为运维工程师怎么用Nginx部署DokuWiki
  3. MySql的安装与使用
  4. 在PHP中使用CURL,“撩”服务器只需几行——php curl详细解析和常见大坑
  5. openstack组件手动部署整合
  6. MapReduce新版客户端API源码分析
  7. android——屏幕适配大全(转载)
  8. js页面换行与空格
  9. linux版powershell安装教程(.net core版)
  10. 009一对一 主键关联映射_单向(one-to-one)
  11. ExtJS学习(四)EditorGrid可编辑表格
  12. Ehcart整合百度地图
  13. jenkins+ant+jmeter自动化性能测试平台
  14. 06 - JavaSE之常用类
  15. kali Rolling 安装QQ和虚拟机
  16. spring boot+mybatis 系列
  17. sql中根据逗号分隔,查出多行数据
  18. 创建工程支持scala代码开发
  19. JavaScript权威指南第01章 JavaScript 概述
  20. Eclipse jvm启动参数在哪设置

热门文章

  1. Vue 单文件元件 — vTabs
  2. Linux atop监控
  3. 【RL-TCPnet网络教程】第19章 RL-TCPnet之BSD Socket服务器
  4. Java编程题:&#160;写一个Singleton出来
  5. 多媒体文件格式(三):M3U8 格式
  6. [Swift]LeetCode127. 单词接龙 | Word Ladder
  7. [Swift]LeetCode817. 链表组件 | Linked List Components
  8. 7.Git分支-分支简介、分支创建、分支切换
  9. Python内置函数(37)——len
  10. 9.Flask Cookie和Session