zoukankan      html  css  js  c++  java
  • 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));
    
  • 相关阅读:
    js运算符逻辑!和instanceof的优先级
    一道关于数组的前端面试题
    关于变量提升
    关于offsetParent
    获取地址栏的参数列表,并转化为对象
    关于类型转换
    bootstrap-4
    bootstrap-3
    bootStrap-2
    bootStrap-1
  • 原文地址:https://www.cnblogs.com/princeness/p/11664969.html
Copyright © 2011-2022 走看看