3

I am wondering Can you assign a variable to alert ? what does it really mean and do ? For example,

var a = alert('test');  

I tried it out, and the alert pops up as soon as the page loads where variable a remains 'undefined' when I call it. Aren't we suppose to make it an anonymous function with the alert inside like

var a = function(){ alert('test'); }

If we want to trigger an alert on something? Why does javascript allow you to do that?

4

4 に答える 4

5
var a = alert('test');

このステートメントは、他の変数割り当てと同じように考えてください。割り当てを実行するために、最初に右辺が評価されます。この場合は関数呼び出しなので、関数を呼び出して戻り値を取得します。alert の場合、戻り値はundefinedです。何も返しません。

次に、戻り値が に代入されるaため、値はaになりますundefined

ステートメントの副作用として、警告メッセージが表示されます。これは、alert() を呼び出して戻り値を取得した結果として発生します。

function foo(x) {
    return x * 2;
}

var a = foo(3);

このコードはアラート呼び出しと構造的に似ており、結果はa6 になります。しかし、alert() は値を返しません。それはこのようなものです:

function bar(x) {
    return;
}

var a = bar(3);

aですundefined

于 2012-09-12T02:24:24.153 に答える
3
var a = alert('test');  

これはalert('test')、その関数からの戻り値を実行して、 という名前の変数に代入することを示していますa

これは、次のものと同じです。

var max = Math.max(1,2,3,4);

wheremax4、実行中の戻り値として、その中の値になりますMath.max(1,2,3,4)


var a = function(){ alert('test'); }

これは、無名関数を宣言し、その関数オブジェクトを変数に代入することを示していますa。関数は宣言されているだけなので、この時点では実行されません。で将来実行できますa()

于 2012-09-12T02:22:22.437 に答える
1

あなたはコメントしました:

それが本当に何も意味しないのに、なぜjavascriptがそれを可能にするのか疑問に思っています

そうですね、JavaScript(および英語を含む他の言語)では、構文が有効である限り、何も意味のない多くのことを実行できます。たとえば、以下のスニペットも意味がありません。

var a;
a = a; // so what?

function something() { /* nothing */ }
var b = something(); // very similar to your example!

一部の関数から割り当てることはできても、他の関数から割り当てることはできないとしたら、一貫性が低下しませんか?言語が入力された場合、それはエラーを生成しますが、そうではないので、それの問題は何ですか?それらが値を返さない場合、それらの戻り値はundefinedであり、それを変数に割り当てようとしても何も壊れません。したがって、何かを返す場合と返さない場合がある関数を作成できます。賢明に使用すれば、それは利点になる可能性があります。これは機能であり、言語の問題ではありません。

于 2012-09-12T02:33:47.873 に答える
0

もしあなたがそうするなら:

 var a = function(){ alert('test'); }

その後、次のことができます。

a();

無名関数を定義したので..

alert は関数であるため、それ自体に何も割り当てることはできません。

変数に値がある場合に何かをポップアップさせたい場合は、次のようにすることができます-

$(document).ready(function() { 
  if (someVar != undefined) {
    alert(someVar);
  }
});
于 2012-09-12T02:20:28.970 に答える