2011-12-20 8 views
2

私はこれをnode.jsで実行しています。なぜ、次のコードセグメントがcb varのスコープを失うのですか?なぜこのjavascript関数はクロージャスコープを失っていますか?

Client.prototype.post = function(path, data, callback) { 
    var self = this; 
    var cb = callback; 
    return function() { 
    console.log(path); 
    console.log(cb); 
    rest.post(self.baseUrl + path, data).on('complete', cb || this.callback); 
    } 
}; 

この関数の呼び出しは、このclient.post('/user', {}, function() {});のように見えるし、次のように出力します

/user 
undefined 

私は[Function]返さ関数である第2のラインを期待していおそらくどちらかのjsの.call()かで実行されています.apply()の方法で実行されるスコープを変更することができます。しかし、私はのようにcbにアクセスできると思うでしょう。

更新:関数内でコールバックをラップすると機能します。しかし、私はまだここで何が起こっているのか説明したいと思います。

+2

'call' /' apply'はスコープではなくコンテキストを変更します。あなたが言っていることは起こってはならないということです。実際のコードにリンクできますか? – david

+1

私のために働きます:http://jsfiddle.net/Squeegy/Uf9nD/あなたの問題はおそらく他の場所にあります... –

+0

https://gist.github.com/1503056 lines 33-41。このファイルは、vowsj –

答えて

2

期待どおりに動作します。問題はすべてのコメントが間違っています。誰かがコーディング方法を学ぶ必要があります。

関連する問題