V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
palmers
V2EX  ›  Node.js

函数 A 在函数 B 中执行的几种方式中实际上有那些区别呢?详情如下:

  •  
  •   palmers · 2016-08-11 09:24:04 +08:00 · 2136 次点击
    这是一个创建于 3034 天前的主题,其中的信息可能已经有所发展或是发生改变。
    //方式一:
    function B(callback) {
    
         if(typeof callback === "function") {
                 callback() ;
         }
    }
    
    //方式二:
    function B(callback) {
    
         if(typeof callback === "function") {
               callback.apply(null,arguments) ;
         }
    }
    
    //方式三:
    function B(callback) {
    
         if(typeof callback === "function") {
               callback.call(null,arguments[0],arguments[1]) ;
         }
    }
    
    

    谢谢大家!

    5 条回复    2016-08-11 11:02:42 +08:00
    xpol
        1
    xpol  
       2016-08-11 09:31:34 +08:00 via Android
    好像跟 this 有关。
    ms2008
        2
    ms2008  
       2016-08-11 10:08:57 +08:00
    装饰器, 2 和 3 的区别就是:
    apply 参数是 array ; call 参数按顺序传入
    q397064399
        3
    q397064399  
       2016-08-11 10:13:19 +08:00 via iPhone
    看解释器吧,除了堆栈还有栈的建立退出之外,想不到能有什么区别了
    sarike
        4
    sarike  
       2016-08-11 10:32:20 +08:00
    就如何传递参数方面,主要还是看应用场景。

    看次问题重点还是要关注函数内 this 指向。

    `callback()` 这样在 callback 内的 this 就是全局对象。

    `callback.call(null)` 或者 `callback.apply(null)` 如果是非严格模式, this 也是全局对象,如果是严格模式的话, this 就是 null 了。

    https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode
    just4test
        5
    just4test  
       2016-08-11 11:02:42 +08:00
    楼上说的对。
    另外 1 没有参数
    2 可以有任意多个参数
    3 只能是两个参数
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2618 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 05:32 · PVG 13:32 · LAX 21:32 · JFK 00:32
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.