2017-10-17 20 views
0

これは動作します:nodejs機能ホイスト:なぜ機能しないのですか?

var http = require('http'); 

    var handler = function (req, res) { 
     res.writeHead(200, {'Content-Type': 'text/plain'}); 
     res.end('Hello World!'); 
    } 


    http.createServer(handler).listen(8080); 

しかし、それはすべてのより多くの巻き上げと私はエラーを得てはならないので、これは私が理由を理解していないではない

var http = require('http'); 

    http.createServer(handler).listen(8080); 

    var handler = function (req, res) { 
     res.writeHead(200, {'Content-Type': 'text/plain'}); 
     res.end('Hello World!'); 
    } 

ありません。

+0

」定義されたハンドラはまだですか?それは、オブジェクトであるときに参照によって変数を渡すだけです。 – lumio

+0

@lumioホイストでは、その後、varを定義することができます。 – user310291

+0

Hoistingは関数式にのみ適用され、関数式には適用されません。https://stackoverflow.com/q/336859/1169798 – Sirko

答えて

4

これは機能を持たないもので、それはvariable hoistingです。それはこのと同等です:

var http = require('http'); 
var handler; 

http.createServer(handler).listen(8080); 

handler = function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    res.end('Hello World!'); 
} 

機能の巻上げは唯一の機能のための宣言に動作します(上記の関数表現です):

var http = require('http'); 

http.createServer(handler).listen(8080); 

function handler(req, res) { 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    res.end('Hello World!'); 
} 

さらに詳しい情報:あなたの避難所なのでhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/function#Function_declaration_hoisting

1

var http = require( 'http');

http.createServer(handler).listen(8080); 

var handler = function (req, res) { 
    res.writeHead(200, {'Content-Type': 'text/plain'}); 
    res.end('Hello World!'); 
} 

この場合、宣言された関数はまだ存在しません。

関連する問題