• JS---call apply bind的区别&&JS---argument


    参考学习:http://www.cnblogs.com/pssp/p/5215621.html
    https://www.cnblogs.com/ly0612/p/6821124.html
    1.call apply bind
    javaScript权威指南上的解释是:
    call() 、apply()可以看作是某个对象的方法,通过调用方法的形式来间接调用函数。bind() 就是将某个函数绑定到某个对象上。

    call() apply() bind()相同点:都可以改变this的指向。
    call() 和apply()的第一个参数相同,就是指定的对象。这个对象就是该函数的执行上下文。
    call()和apply()的区别就在于,两者之间的参数。
    call()在第一个参数之后的 后续所有参数就是传入该函数的值。apply() 只有两个参数,第一个是对象,第二个是数组,这个数组就是该函数的参数。

    bind() 方法和前两者不同在于: bind() 方法会返回执行上下文被改变的函数而不会立即执行,而前两者是直接执行该函数。他的参数和call()相同。

    2.argument
    说明:
     Javascrip中每个函数都会有一个Arguments对象实例arguments,它引用着函数的实参,可以用数组下标的方式"[]"引用arguments的元素。arguments.length为函数实参个数,arguments.callee引用函数自身。
    属性:

    length, 获取arguments对象的长度(实参)。   
    callee, 引用当前正在执行的函数。

    1.可以借用arguments.length可以来查看实参和形参的个数是否一致:

    function add(a, b) {
      var realLen = arguments.length;
      console.log("realLen:", arguments.length);
      var len = add.length;
      console.log("len:", add.length);
      if (realLen == len) {
      	console.log('实参和形参个数一致');
      } else {
      	console.log('实参和形参个数不一致');
      }
    };
    add(1,2,3,6,8);
    

    2.可以借用arguments.callee来让匿名函数实现递归:

    var sum = function(n) {
    	if(n == 1) {
    		return 1;
      } else {
      	return n + arguments.callee(n-1);
     }
    }
    console.log("sum =", sum(5));
    
  • 相关阅读:
    md5
    表空间
    create_index
    非额度合同和额度合同
    如何在linux中查找python安装包的路径
    Golang中的SingleFlight与CyclicBarrier
    linux安装protoc
    protobuf 的优缺点
    Xshell 连接 VirtualBox
    限制 input 输入框只能输入纯数字
  • 原文地址:https://www.cnblogs.com/princeness/p/11664969.html
Copyright © 2020-2023  润新知