• apply与call


    apply (..) 与 call (..)

    apply()call() 的区别是:

    • apply() 方法接收的是一个参数数组
    • call() 方法接收的是参数列表

    apply (..)

    apply() 方法调用一个具有给定 this 值的函数,以及作为一个数组(或类似数组对象)提供的参数

    语法

    func.apply(thisArg, [argsArray]);
    

    参数

    • thisArg

      可选参数。在 func 函数运行时使用的 this 值。

    • argsArray

      可选参数。一个数组或类数组对象,其中的数组元素将作为单独的参数传给 func 函数。

      如果参数值为 nullundefined ,则表示不需要传入任何参数

    返回值

    调用有指定 this 值和参数的函数结果

    call (..)

    call(..) 方法用法和 apply(..) 一致,只是传入的参数不同:

    语法

    func.call(thisArg, argument1, argument2, ...);
    

    参数

    • thisArg ,this值
    • argument1 ~ n 参数列表

    [ ] .slice .call ( arguments, 1 )

    /**
     * test something~
     * @param fn {function} 回调函数
    **/
    function test(fn) {
        let args = [].slice.call(arguments, 1);
        
        args.push(233);		// [fn, 233]
    }
    

    分拆代码:

    1. [] ,空数组
    2. [].slice ,相等于 Array.prototype.slice() ,即 Array 的原型链,而 slice 是原型链中的方法
    3. call(arguments, 1) ,将 test 函数传入的 fn 函数赋给 args 数组的 slice ,再由 slice 转换成数组

    关于 slice 方法

    slice 不修改原数组,只会返回一个潜伏之了原数组中的元素的一个新数组

    • 如果该元素是个对象引用 (不是实际的对象),slice 会拷贝这个对象引用到新的数组里。两个对象引用都引用了同一个对象。如果被引用的对象发生改变,则新的和原来的数组中的这个元素也会发生改变。
    • 对于字符串、数字及布尔值来说(不是 StringNumber 或者 Boolean 对象),slice 会拷贝这些值到新的数组里。在别的数组里修改这些字符串或数字或是布尔值,将不会影响另一个数组。
  • 相关阅读:
    git删除目录,且保留本地的
    gitpush 免密码
    git常用操作
    ubuntu安装Nodejs
    ubuntu如何配置samba
    用AI将png转成svg做字符图标教程
    windows server 2012设置远程连接断开后自动注销
    windows 2012执行计划任务错误:操作员或系统管理员拒绝了请求(0x800710E0)
    删除节点
    代理 XP”组件已作为此服务器安全配置的一部分被关闭。系统管理员可以使用 sp_configure 来启用“代理 XP”。
  • 原文地址:https://www.cnblogs.com/CreateBox/p/15194648.html
Copyright © 2020-2023  润新知