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

这段代码里的三个变量从哪来的

  •  
  •   imherer · 2017-08-11 20:09:02 +08:00 · 3652 次点击
    这是一个创建于 2695 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在网上看到别人的代码,代码如下(我省掉了很多,其中这一段看不懂):

    下面的代码是在一个 js 文件里

    var login_logic = require("../xxxx");
    var handler = {
         "201" : new on_user_login()
    }
    function on_user_login()
    {
        this.handle = function(data,send,s) // 这里的 data、send、s 这 3 个变量怎么来的?
        {
            login_logic.on_user_login(data,send,s);
        }
    }
    
    14 条回复    2017-08-17 21:38:27 +08:00
    blindpirate
        1
    blindpirate  
       2017-08-11 20:13:48 +08:00
    那不是变量,那是形参。
    imherer
        2
    imherer  
    OP
       2017-08-11 20:15:30 +08:00
    @blindpirate 对,说错了,是形参 。
    在上面调用的时候没有传参数进来,这里为什么有了呢?
    blindpirate
        3
    blindpirate  
       2017-08-11 20:16:13 +08:00   ❤️ 1
    需要传进来的是实参。
    coderfox
        4
    coderfox  
       2017-08-11 20:17:37 +08:00 via Android   ❤️ 2
    onHandle 是个事件处理程序,应该是事件管理器负责传过去的。
    lmqdlr
        5
    lmqdlr  
       2017-08-11 21:44:24 +08:00 via Android
    这个只是 new 了一个对象,并没有调用 handle 这个方法
    codermagefox
        6
    codermagefox  
       2017-08-11 21:47:46 +08:00   ❤️ 2
    楼主这个代码我还仔细看了半天想看看有什么玄机,看了半天发现没有,战战兢兢的看完底下的回复....好吧,确实没有
    polun
        7
    polun  
       2017-08-11 21:59:30 +08:00
    大哥,1 楼已经说得很明白了。
    jesse_luo
        8
    jesse_luo  
       2017-08-11 22:08:23 +08:00
    虽然不懂 js,但这里是声明了一个 function 并赋值给 this.handle,所以只是声明

    简单来说就是 1 楼回答
    microhz
        9
    microhz  
       2017-08-11 22:14:44 +08:00 via iPhone
    Js 里都是对象,包括函数本身
    Shura
        10
    Shura  
       2017-08-11 23:37:24 +08:00 via Android
    虽然不懂 js,但是 handle 是个函数,应该用于回调吧
    M3oM3oBug
        11
    M3oM3oBug  
       2017-08-12 00:28:54 +08:00 via Android   ❤️ 1
    1.xxxx 是个模块,导出一个对象,被声明为私有变量 login_logic。
    2.还有另一个私有变量 handler 对象,有一个属性名为 201,值为 on_user_login 构造函数的一个实例。
    3.on_user_login 虽然没有首字母大写,也被作为构造函数使用了,含有一个属性 handle,值为一个方法,形参为 data, send, s,会调用 xxxx 模块实例的 on_user_login 方法。
    调用时这样:handler["201"].handle(实参 data, 实参 send, 实参 s)。
    我的理解是这样
    autoxbc
        12
    autoxbc  
       2017-08-12 03:45:33 +08:00   ❤️ 1
    @imherer #2 这段代码比较绕的是给自己的对象(function on_user_login)和外部模块的对象(login_logic.on_user_login)起了一样的名字,实际那个需要参数的函数(后者)并没有被调用,只是作为方法被引用了一下
    palytoxin
        13
    palytoxin  
       2017-08-12 10:09:06 +08:00 via Android
    如果学过 Java 的话,大约类似别人定义了一个接口,你必须复写然后由别人 or 别的方法调用
    harttle
        14
    harttle  
       2017-08-17 21:38:27 +08:00
    这就是函数声明嘛。只不过是嵌套函数,类比其他编程语言中的 lambda 表达式。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   958 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 20:20 · PVG 04:20 · LAX 12:20 · JFK 15:20
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.