2012-02-14 24 views
0

なぜJavaScriptのネストされた関数

var spo = function(){ 
    var qq = function(){}; 
} 

は未定義のエラーをスローしないが関数ではありませんではないでしょうか?


より複雑な例では、正確なエラーをスロー:例外TypeError:未定義このqqでUbuntuの

spo = function(car){ 

     var q = 10; 
     var s = 'fraggle'; 

     var qq = function(){ 
       console.log(s); 
     } 

     (function(){ 

       while(q){ 
         console.log(q); 
         q--; 
       } 
         qq.call(); 
         car.call(); 
     })(); 


}; 


spo(function(){console.log('as intended');}); 
+4

どちらも私の仕事です。 – Blender

+0

どのブラウザですか?どうやって 'qq'と呼んでいますか? – RobG

+0

あなたは何を意味するのか分かりません。未定義のエラーが発生したときとそうでないときを示すコードを提供できますか? – LandonSchropp

答えて

2

でコンパイル

ノードバージョンv0.6.10が動的機能が割り当てられている機能ではありません。一方

var spo = function(){ 
    // qq is undefined here 
    var qq = function(){}; 
    // qq is defined here 
} 

、この場合には、QQは、spo

var spo = function(){ 
    // qq is defined here 
    function qq(){}; 
    // qq is defined here also 
} 

EDITにどこでも表示されている関数のように定義される:実際の問題が表示されているあなたの更新されたコードで 、無セミ

var qq = function(){}()(); // This is causing TypeError 

下記のような間違った声明につながる機能の後のコロンは、関数の後にセミコロンを置きます。

var qq = function(){ 
    console.log(s); 
}; // you missed this semi colon 

(function(){ 

    while(q){ 
     console.log(q); 
     q--; 
    } 
    qq.call(); 
    car.call(); 
})(); 
+1

あなたはOPが望んでいたものをだと思います –

+0

彼は良い質問に答えましたが、私はvar qq =関数でエラーを出しています。 – Prospero

+0

私はどんな宝くじ番号を演奏すべきですか? – Prospero

-3

qqよう

qq(); 

qq.call(); 

を変更してみてくださいだけ機能したがってない方法callと "オブジェクト" です。

+0

実際には、Javascriptの関数*はメソッドを持つオブジェクトです。あなたは '.call()'がここでは必要ないということは間違いありません。 – Twisol

+1

wowzerz -1はJavascriptの良い部分を読んでいない。 – Prospero

+0

Javascriptにはオブジェクトの概念がないと主張できます。http://stackoverflow.com/questions/107464/is-javascript-object-orientedを参照してください。 –

0

qqの定義の後にセミコロンが必要です。エンジンはqq関数を括弧内のあなたの無名関数の引数で呼び出す結果を実行しようとしています。見えにくい場合は、qqの定義と自己実行関数を分離する改行と空白を削除すると想像してください。

var qq = function() { 
}(function() {})(); 
関連する問題