2016-10-18 5 views
0

私は1つまたは複数のパラメータを宣言せずに関数を宣言する方法を探しています。これは、(例えば)最初の引数の値が何であるか気にしない関数を実装している場合に使用されます。たとえば、この機能をそれは関数の引数を宣言しないままにする方法です

を与えられた:

function foo(this_arg_is_unused, important_arg) { 
    doSomethingWith(important_arg); 
} 

は、より多くのこのようなそれを宣言するためにいくつかの方法はありますか?私は簡単に行うことができます実現

function foo(, important_arg) { 
    doSomethingWith(important_arg); 
} 

function foo() { 
    doSomethingWith(arguments[1]); 
} 

しかし読みにくくなってきて起動すると、それは(例えば)に、より困難になることをカレーためにfn.jsを使用議論

私は現在、多分私はちょうど引数が使用されていないことを示すために、視覚的ニーモニックを使用することができます考えています:

function foo(ø, important_arg) { 
    doSomethingWith(important_arg); 
} 

しかし、これはまた読みやすさの問題を有することができます。

実世界の例:

jQuery's .each()によって使用されるコールバック関数は、最初は、配列/オブジェクトにインデックスまたはプロパティ名のいずれかであり、第二の値であり、二つの引数を取ります。いくつかのdiv要素を操作するには、このような何かを行う可能性があります:

$($('div').each(function(index, value) { 
 
     console.log(value); // equivalent to doSomething(this) 
 
    }));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div>Nothing here</div>

が矢印機能を使用して

$($('div').each((ø, value) => console.log(value)));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div>Nothing here</div>

(引数[]はできませんを使用した場合)
+0

私はJavaScriptには言語サポートがないと思います。 Haskellのコンベンションでは、アンダースコアで始まる名前(例: '_index')を使用します。 – melpomene

+0

@joews実世界の例を見ていませんか?かなり頻繁に。ほとんどの人は 'this 'は便利なので、' .each() '引数のコールバックを与えるのは気にしませんが、矢印関数で' this'を使うことはできません – Tibrogargan

+0

' tケアの議論。 – Redu

答えて

0

関数arguに空白を残すことはできません。 ments。プレースホルダの引数がうまくいきます。

あなたがそれを行うにはしたくない場合は、まず、使い捨ての引数を期待する関数をラップ高階関数を書くことができます:

function withExtraArg(f, thisValue = null) { 
    return (x, ...args) => f.call(thisValue, ...args); 
} 

をとの自然数を取り、あなたの関数を書きます引数:

function withExtraArg(f, thisValue = null) { 
 
    return (x, ...args) => f.call(thisValue, ...args); 
 
} 
 

 
// your function 
 
function log (value) { 
 
    console.log(value) 
 
} 
 

 
$($('div').each(withExtraArg(log)));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div>Nothing here</div>

+0

'f.call(args)'が間違っています。あなたは 'f(... args)'を意味しましたか?そして、それは 'this'の価値を無視するでしょう。 – Bergi

+0

あなたがコメントしていたように修正されました:-) – joews

+0

まだ動作していません、 'f.call(thisArg、... args)'または 'f.apply(thisArg、args)'にする必要があります。 – Bergi

0

そこリットルへの道宣言されていない関数の引数をeaveしますか?

いいえ、省略すると構文エラーです。

を使用していない多分私はちょうどはい、それは正しい方法だ引数を示すために、視覚的ニーモニックを使用することができます。未使用のパラメータのための慣用名は、それが特別な意味を持っている(とでも複数回使用することができます)他の言語から知られているアンダースコア_、次のとおりです。

function foo(_, important_arg) { 

現実世界での例:jQueryのによって使用されるコールバック関数.each()

はい、jQueryはコールバックの引数の順序を乱しています。通常、値は最初に表示されます。 jQueryのでは、値はゼロ番目の引数に行く - this値を、その慣用的なjQueryのは、あなたには、いくつかの理由でthisを使用できない場合は、2番目のパラメータを使用する必要があります

$('div').each(function() { 
    console.log(this); 
}); 

です。これを回避する方法はありません。

+0

私は '_'を使いたいのですが、gettextを破ることになります(これが私が" null "を使う方向に傾いている理由です)。私はjQueryイディオムを認識していますが、矢印関数では失敗します。 – Tibrogargan

+0

@Tibrogargan "gettext"とはどういう意味ですか?そして、はい、[あなたはどこでも矢印関数を使うはずだとは思わない](http://stackoverflow.com/q/34361379/1048572) - jQueryはその点では壊れていると見なすことができますが、互換性の理由からjQueryを変更することはほとんどありません(いつものようにJS)。 – Bergi

+0

[gettext](https://www.gnu.org/software/gettext/)。多くの言語のライブラリがあり、JSを含む多くの人がマクロ/グローバル/フックとして '_'を使用しています – Tibrogargan

関連する問題