首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JavaScript中apply、call、bind的区别与用法

语法 1.1 Function.prototype.apply() apply() 方法调用一个函数, 其具有一个指定的this值,以及作为一个数组(或类似数组的对象)提供的参数。...2.2 call 与apply方法的用法 ? 结果相同,call()和apply(),第一个参数都是要绑定上下文,后面的参数是要传递给调用该方法的函数的。...不同之处在于,在给调用函数传递参数时,apply()是数组,call()参数是逐个列出的。 2.3 bind()的用法 ? bind方法传递给调用函数的参数可以逐个列出,也可以写在数组中。...总结bind()的用法:该方法创建一个新函数,称为绑定函数,绑定函数会以创建它时传入bind()的第一个参数作为this,传入bind()的第二个以及以后的参数加上绑定函数运行时本身的参数按照顺序作为原函数的参数来调用原函数...(2).三者第一个参数都是this要指向的对象,如果如果没有这个参数,默认指向全局window。 (3).三者都可以传参,但是apply是数组,而call是有顺序的传入。

1.2K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    JavaScript深入学习this、call、apply和bind

    ")(); //kitty eat apple 从上述的例子可知: apply接收的是一个由若干参数组成的数组,而call接收的是若干个参数列表。...res:obj; } 先创建一个空对象obj 将新创建的空对象的隐式原型指向其构造函数的显式原型 使用call改变this的指向 如果没有返回值或者返回的是一个非对象值,则将obj返回为一个新对象...(p2.name,p2.sex,p2.learn);//JoeWright male FE (3)获取数组的最值 Math.max()方法,支持传递多个参数,比如:Math.max(1,4,2,3,7,5,6...) 但是它不支持直接传递一个数组作为参数,比如:Math.max(new Array(1,4,2,3,7,5,6))。...而apply接收一个数组,并且是将数组中的每个值,分开来,传递给Math.max()方法 例如: var arr=[1,3,6,10,9]; console.log(Math.max.apply

    38820

    ES6知识盲点整理

    return ... } ,thisArg) 参数: callback 生成新数组元素的函数,使用三个参数: currentValue callback 数组中正在处理的当前元素。...关于严格模式普通函数和箭头函数中this的指向问题 ---- call、apply和bind的区别 call调用 将方法中的this指向call中第一个参数,当第一个参数为null、undefined时...,默认指向window; call中第一个参数之后是要传递给方法的参数列表。...apply与call相似,不同之处在于传递给方法的参数形式不一致。apply传递给方法的参数是数组的形式。...---- 深入理解ES6箭头函数里的this 深入理解ES6箭头函数里的this,看这篇就够了 关于箭头函数中的this的指向 ---- ES6(…)展开运算符 在ES6中用…来表示展开运算符,它可以将数组方法或者对象进行展开

    54130

    call() 和 apply() 的相关介绍和应用场景

    表示不需要传入任何参数 call() 和 bind() 的第二个参数都是参数列表,而 apply() 则是参数数组(或者类数组)—— 尽管如此,在这些参数传递给调用函数时,仍然是以参数列表的形式传递的(...对于 Son 而言,其内部的 this 将指向稍后实例化的对象,利用这一点,我们在 Son 的内部通过 call() 或者 apply() 调用 Parent,同时传参 this,这样就可以增强子类实例...4.类数组借用数组的方法 例如 arguments 是类数组,并不具备数组的 forEach() 方法,那么我们可以通过 call() 调用数组的该方法,同时将方法里面的 this 绑定到 arguments...核心是 apply() 可用于展开数组,即我们前面说过的将参数数组转化为参数列表。...例如我们要求一个数组的最大值,虽然 Math 对象有 max() 方法,但该方法只接受参数列表。

    1.3K20

    【ES6基础】展开语法(Spread syntax)

    今天小编将从以下方面进行介绍: 函数传参中的应用 数组的相关应用 剩余参数的应用 本篇文章阅读时间预计6分钟 01 函数传参中的应用 ES6之前,如果我们希望将数组作为参数传递给函数中的参数,我们可以使用...,将它们分拆成单个参数传递给函数进行调用。...我们可以使用展开语法传递多个数组进行参数传递,如下段代码所示: let array1 = [1]; let array2 = [2]; let array3 = [...array1, ...array2...现在ES6给我们带来了一个新的对象,可以拿到除开始参数外的参数,即剩余参数,我们可以使用展开语法...进行获取。...,一旦函数中的参数第一个参数使用剩余参数,便不能添加任何参数,否则将会抛出错误。

    58320

    手动实现apply、call、bind

    argsArray: 可选,传递一个参数数组或者类数组对象,其中的数组元素将作为单独的参数传给funct函数,如果该参数的值为null或undefined,则表示不需要传入任何参数。...,对于参数的处理,直接使用ES6的Spread运算符将数组展开作为参数传递。..._call()时,在_call()方法中的this指向的是funct对象,将此funct对象作为一个变量赋予将要绑定的对象的一个属性中,使用将要绑定的对象来调用这个funct,即可实现this指针指向将要绑定的对象...,对于参数的处理,使用ES6的Rest操作符来接收剩余参数,使用ES6的Spread运算符将数组展开作为参数传递。...thisArg: 必选,调用绑定函数时作为this参数传递给目标函数的值,如果使用new运算符构造绑定函数,则忽略该值,当作为回调提供时,作为thisArg传递的任何原始值都将转换为object,如果bind

    58620

    JavaScript剩余操作符Rest Operator

    剩余参数表示参数个数不确定的参数列表。在函数被调用时,该形参会成为一个数组,数组中的元素都是传递给该函数的多出来的实参的值。 获取参数 剩余操作符可以用来方便地获取传进来的参数。...应此剩余参数可以使用数组的相关方法sort,map,forEach,pop,而arguments不能。...arguments想要变成数组,可以通过Array.prototype.slice.call方法,使用剩余操作符可以避免将arguments转为数组的麻烦。...} sum(1, 2, 3, 4, 5 ); 而使用剩余操作符,则不需要转化,直接使用,更加方便。...展开操作符会”展开“数组编程多个元素,剩余操作符会把多个元素压缩成一个单一的元素。 欢迎关注公众号“ITman彪叔”。彪叔,拥有10多年开发经验,现任公司系统架构师、技术总监、技术培训师、职业规划师。

    90200

    JavaScript剩余操作符Rest Operator

    剩余参数表示参数个数不确定的参数列表。在函数被调用时,该形参会成为一个数组,数组中的元素都是传递给该函数的多出来的实参的值。 获取参数 剩余操作符可以用来方便地获取传进来的参数。...应此剩余参数可以使用数组的相关方法sort,map,forEach,pop,而arguments不能。...arguments想要变成数组,可以通过Array.prototype.slice.call方法,使用剩余操作符可以避免将arguments转为数组的麻烦。...} sum(1, 2, 3, 4, 5 ); 而使用剩余操作符,则不需要转化,直接使用,更加方便。...展开操作符会”展开“数组编程多个元素,剩余操作符会把多个元素压缩成一个单一的元素。 欢迎关注公众号“ITman彪叔”。彪叔,拥有10多年开发经验,现任公司系统架构师、技术总监、技术培训师、职业规划师。

    97330

    React 三大属性之一 props的一些简单理解

    We call this object “props”. 意思为: 当React看到表示用户定义组件的元素时,它会将JSX属性作为单个对象传递给此组件。我们称这个对象为“props。...props的作用 作用:用于接收组件外部的数据 传递数据: 通过给组件标签添加属性 接收数据:函数组件通过 参数 props接收数据,类组件通过 this.props接收数据 props的特点 可以给组件传递任意类型的数据...props是只读属性,不能对值进行修改 使用类组件时,如果写了构造函数,应该将props传递给super(),否则无法在构造函数中获取到props,其他的地方是可以拿到的 props的应用场景 1,...子组件调用父组件的方法 (1)子组件要拿到父组件的属性,需要通过 this.props 方法。...类组件中父组件给子组件传递参数 import React, { Component, Fragment } from "react"; //React的props传参 // 父组件 class App

    1.3K10

    React 三大属性之一 props的一些简单理解

    We call this object “props”. 意思为: 当React看到表示用户定义组件的元素时,它会将JSX属性作为单个对象传递给此组件。我们称这个对象为“props。...props的作用 作用:用于接收组件外部的数据 传递数据: 通过给组件标签添加属性 接收数据:函数组件通过 参数 props接收数据,类组件通过 this.props接收数据 props的特点 可以给组件传递任意类型的数据...props是只读属性,不能对值进行修改 使用类组件时,如果写了构造函数,应该将props传递给super(),否则无法在构造函数中获取到props,其他的地方是可以拿到的 props的应用场景 1,...子组件调用父组件的方法 (1)子组件要拿到父组件的属性,需要通过 this.props 方法。...类组件中父组件给子组件传递参数 import React, { Component, Fragment } from "react"; //React的props传参 // 父组件 class App

    6.3K40

    借问变量何处存,牧童笑称用指针,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang类型指针(Pointer)的使用EP05

    is", b) }     返回: value of a after function call is 58     但如果传参过程中使用指针,将a变量的指针对象传递到方法内,方法内修改的其实是内存地址变量...假设我们想对方法内的数组进行一些修改,并且对调用者可以看到方法内的数组所做的更改。...一种方法是将一个指向数组的指针传递给方法: package main import ( "fmt" ) func modify(arr *[3]int) { (*arr)[0] = 90 }...func main() { a := [3]int{89, 90, 91} modify(&a) fmt.Println(a) }     程序返回: [90 90 91]     虽然可以用指针传递给一个数组作为方法的实参并对其进行修改...,可以将该数组的切片当作参数传给函数,也可以将这个数组的指针当作参数传给函数,显而易见,使用切片更加方便。

    46140

    过程(五)可选参数和可变参数

    大家好,上节介绍了过程传递参数时,形参与实参结合的两种方式,传地址和传值。本节将介绍可选参数和可变参数。...前两个参数就必须提供,第三个参数就可以选择性提供。 需要注意的是,创建过程时,可以定义多个可选参数,但是可选参数必须放在参数表的自最后,并且必须是variant变体型变量。...可变参数为一个数组,过程中使用lbound函数和Ubound函数获得数组的下标的上下界。然后通过for循环把每个元素进行累加,并将累加结果保存到第一个参数t中,返回给调用程序。...在调用时,参数传递将参数i的地址传递给sum1子过程的形参t,将后面1,2,3,4,5,6作为一个数组传递给intnum()数组。在子过程中计算数组中所有元素的和。...需要注意的是ParamArray只能用于参数列表的最后一个参数,指明最后这个参数是一个Variant变体型变量元素的Optional数组,ParamArray关键字不能和ByVal、ByRef或Optional

    4.8K20

    Scala基础 - 传名参数和传值参数(by-nameby-value parameter)

    介绍 传值参数在函数调用之前表达式会被求值,例如Int,Long等数值参数类型;传名参数在函数调用前表达式不会被求值,而是会被包裹成一个匿名函数作为函数参数传递下去,例如参数类型为无参函数的参数就是传名参数...下文将举例说明这两者的区别。 2....简单类型的传递示例 2.1 传值参数(by-value parameter)示例 在下面的示例中,编译器检测到strToInt接受一个传值参数,所以先对传入的参数表达式{println("eval parameter...其实此处编译器自动将参数表达式{println("eval parameter expression"); "123"}转换成匿名的无参函数,并传递给s。 3....注意,如果参数类型是函数类型,但不是无参函数,还是按值传递,例如: object Test { def strToInt(s: (String) => Int) = { println("call

    2K80

    读 zepto 源码之工具函数

    将 source 和 target 对应的属性及 deep 作为参数,递归调用 extend 函数,以实现深度复制。...在 $.extend 中,如果不需要深度复制,第一个参数可以是目标对象 target, 后面可以有多个 source 源对象。...如果需要深度复制,第一个参数为 deep ,第二个参数为 target ,为目标对象,后面可以有多个 source 源对象。...如果 elements 为数组,用 for 循环,调用 callback ,并且将数组索引 index 和元素值 item 传给回调函数作为参数;如果为对象,用 for···in 遍历属性值,并且将属性...并且将对应的元素(属性值)及索引(属性名)传递给回调函数,如果回调函数的返回值不为 null 或者 undefined ,则将返回值存入新数组中,最后将新数组扁平化后返回。

    81500

    过程(三)形参与实参结合

    上节介绍了Sub过程的定义和调用,后面将介绍过程的传递参数部分。包括实参与形参的结合,以及传地址和传值的差异。...形参与实参的结合 为了使过程更有通用性,很多过程都需要设置参数,传递不同的参数给过程。来执行不同的结果。 由于涉不容易理解的概念,下面就先通过示例来说明,首先在模块中创建一个通用过程jisuan。...由于调用过程时只需要提供的参数是I和k来计算,所以h不用写在参数中,而是在过程中定义。 有参数的过程是无法直接运行的,也无法通过宏调用。下面通过call语句来调用演示。...实参是实际参数的简称,是在调用sub过程时传递给sub过程的值,在VBA中,实际参数可以是常量、变量、数组或是对象类型的数据。 在调用sub过程时,把实参传递给形参,就被称为形参和实参的结合。...(实参是数组的情况会再介绍完数组后再补充)。下一节将介绍传地址和传值两种方式,祝大家学习快乐。 ----

    1.6K30
    领券