2011-07-01 2 views

答えて

6

関数は通常2つのことを行います。何かを実行し、値を返します。いくつかの関数はそれらの事のうちの1つだけを行い、いくつかは両方を行います。たとえば、関数:

function square(x) { 
    return x * x; 
} 

副作用はありません。それはすべて値を返し、その呼び出しは常に戻り値に置き換えられるためです。一方、alert()のようなものは、副作用(ユーザに警告する)のためにのみ呼び出され、その戻り値に対しては決して呼び出されません。

だから、voidの演算子は、JavaScriptが戻り値を無視し、興味のあるのは関数の副作用であると述べています。

+0

さて、どうしてボイドが必要なのですか?私は単にそれが値を返すことができますが、それを右に使用しないことを意味する..? –

+0

多くのことは、多方面で行うことができます。これはそれを行うための単なる方法です。現実にはあまり使われていません。 –

2

単純な例は、関数呼び出しです。 「未定義」の値が必要だがDOM操作を行う関数を呼び出す場合は、結果をvoidに「キャスト」して未定義の結果を得ることができます。

「未定義」は予約語ではないという奇妙な事実を回避していますが、これは言語の「良い部分」にあるとは思わないでしょう。 void 0という表現は間違いなくとなるでしょう。実際にはは未定義です。

+0

'void 'の唯一の使用は' undefined'を確実に与えることであると言っていますか? ( 'undefined'はキーワードではないので実際には別の値に置き換えられるかもしれません) –

+0

それはほとんどすべてです。私は、「無効な」オペレーターがあなたにもたらす可能性のある神秘の感情を分かち合います。あなたの例では – Pointy

1

「副作用」は、voidが引数として取る関数の結果です。このシナリオでは、関数F1復帰する「偽」が、「空」でのラッピングは、本質的になるか「副作用」は「ツバメ」:

var F1 = function() { return false; } 
void(F1()); 

笑...引用符の無償使用を許しなさい。

+0

ですが、2行目を 'F1()'に置き換えると、全く違いがないことに私は同意しますか? (返り値を使用したくない場合は、それを使用しないことを意味しますか?) –

+0

。私は元の質問が言語機能が特に価値があったかどうかではなく、「副作用」の意味に関係していたと思います。私は個人的にそれ自身のための実際の使用を見ません、私はちょうどあなたが定義を解釈するのを助けることを試みていました。希望しました –

1

一例これです:それは何も返さないために

<a href="javascript:void(**do stuff here**)">link</a> 

ボイド力。無効な値が返されると、リンクによってユーザーがページから離れてしまう可能性があります。

+0

私は単純に** link **の場合は空を必要とするのですか? –

+0

これを行うもう1つの方法。 –

2

(i+=1)i+1と評価されたが1

voidの目的はいますが、特にあなたが副作用をしたい場合の副作用をマスクしないことでiをインクリメントの副作用を持つ式が、ドン'tは式の結果が必要です。

+0

私はそれを取得しません。私は表現の結果を望んでいない場合は、私は単に戻り値を使用しないでください?なぜ私は空を必要としますか?私はそれが未定義を返すようにしたい場合、私は単純に**返す未定義** ** –

+0

も動作します。時には複数のステートメントを必要としないこともあります。あなたは実際にはこの "空"のトリックを決して使用しないでしょう! – dkamins

関連する問題