2つの関数オブジェクト:Javascriptで非キャプチャ関数とクロージャを区別することはできますか?
// toplevel
var f1 = function(){return k;};
var f2 = (function(k){return function(){return k;}})(42);
が同じソースコードを持っている「関数(){戻りkは;}」が、f1
はf2
代わり閉鎖され、k
地球環境で検索された機能でありますローカルk
をキャプチャした。
f2
は閉鎖だと言えますか? typeof
は"function"
です。
例えば、関数のソースコードをデータベースに格納することは、eval
で関数を再構築できるので意味があります。代わりにクロージャのソースコードを格納することは、キャプチャされた変数のために動作しません。
なぜクロージャである関数とそうでない関数を区別する必要がありますか? – Quentin
どういう意味ですか? 'f1'と' f2'をまったく同じものとして定義しても、 'f1 === f2 // false'のようになります。 –
@Quentin:データベースに関数のソースを格納するのは意味がありますが、クロージャーを格納することはできません。 – 6502