万年素人からHackerへの道

万年素人がHackerになれるまで殴り書きするぜ。

  • ・資産運用おすすめ
    10万円は1000円くらい利益
    資産運用ブログ アセマネ
    • ・寄付お願いします
      YENTEN:YYzNPzdsZWqr5THWAdMrKDj7GT8ietDc2W
      BitZenny:ZfpUbVya8MWQkjjGJMjA7P9pPkqaLnwPWH
      c0ban:8KG95GXdEquNpPW8xJAJf7nn5kbimQ5wj1
      Skycoin:KMqcn7x8REwwzMHPi9fV9fbNwdofYAWKRo

    Node.jsのsocket.ioで無名関数の変数代入した方法だと動かない謎。

    JSで関数を定義するときに、
    1.

    function hoge() {
    }
    

    でやらずに、
    2.

    var hoge = function() {
    }
    

    のように匿名関数を変数に代入する方法がある。

    http://www.amazon.co.jp/gp/product/4774144665?ie=UTF8&camp=1207&creative=8411&creativeASIN=4774144665&linkCode=shr&tag=noctushinrsdi-22
    の本による(僕は買ってないが・・。)と、
    1の方法は、「function命令で定義する」と呼んで、
    2の方法は、「関数リテラルで表現する」と呼べばいいのか?
    参考URL: http://micomura.hatenablog.jp/entry/2012/02/03/145713

    CoffeeScriptだと2の書き方になる。

    ・app.coffee

    app = require('http').createServer(handler)
    io = require('socket.io').listen(app)
    fs = require('fs')
    
    app.listen(1337) 
    handler = (req, res) ->
      fs.readFile(__dirname + '/index.html', (err, data) ->
        if err
          res.writeHead(500)
          res.end('Error')
        res.writeHead(200)
        res.write(data)
        res.end()
      )
    

    と書けば、

    var app, fs, handler, io;
    
    app = require('http').createServer(handler);
    
    io = require('socket.io').listen(app);
    
    fs = require('fs');
    
    app.listen(1337);
    
    handler = function(req, res) {
      return fs.readFile(__dirname + '/index.html', function(err, data) {
        if (err) {
          res.writeHead(500);
          res.end('Error');
        }
        res.writeHead(200);
        res.write(data);
        return res.end();
      });
    };

    となり、

    handler = function(req, res) {

    の部分のせいで動かなかった。

    function handler(req, res) {

    とやれば動作するのだが?
    だれか、これで動かない原因教えてください。