2017-02-18 4 views
0

次のコードに何が間違っているのかわかりませんし、2番目の方法でそれを行うと、なぜ機能するのでしょうか。誰も私がこれを理解するのを助けることができますか?クロージャを間違った方法で試してみませんか?

私はこの次のJavaScriptコードがあります。私はこの何も

clsFunc('div') 

を起こらないように、この関数を呼び出ししようとした場合

var clsFunc = function(prefix) { 
    var id = 0; 
    return function() { 
    id = id + 1; 
    console.log(prefix + id); 
    } 
} 

最初の方法を(動作しませんでした) 第2の方法(加工)

var getId = {'div': clsFunc('div')} 

getId.div() 

結果:

div1 
undefined 
getId.div() 

結果:

div2 
+0

少なくとも関連しています:http://stackoverflow.com/questions/111102/how-do-javascript-closures-work –

+0

これは基本的に 'clsFunc( 'div')'と 'clsFunc( 'div')の違いです) ' – Bergi

答えて

2

clsFunc機能関数を作成し、それを返します。だからあなたはどこにも格納していないので、それは機能を作成し、それからそれを投げ捨てるので、無駄です。

...は無意味です。

2番目の方法は、作成された関数をオブジェクトプロパティに保存します。この関数は、id変数を含む呼び出しが返されても、その関数を作成したコンテキスト(clsFuncの呼び出し)を参照しています。関数(getId.div())を呼び出すと、idに1が加算され、id(1、次に2、3、など)の場合は、接頭辞("div")の後に新しい値が出力されます。あなたはあなたの第二の方法のオブジェクトを必要としない

、あなただけの変数を使用することができます。

var clsFunc = function(prefix) { 
 
    var id = 0; 
 
    return function() { 
 
    id = id + 1; 
 
    console.log(prefix + id); 
 
    } 
 
}; 
 

 
var f = clsFunc('div'); 
 
f(); // "div1" 
 
f(); // "div2"


(あなたが見ているundefined sが理由だけです関数を呼び出した結果を示すJavaScriptコンソールでこれを実行していますが、関数は何も返さないため、結果はundefinedです。

+0

Downvoter:どうした?これはどのように「役に立たないのですか? –

+0

このクイックヘルプに感謝します。あなたの助けに感謝。 –

+0

私は同じ時間に彼らの答えを削除した男から復讐DVを推測しています。 – JJJ

関連する問題