Javascript将变量分配给警报

时间:2012-09-12 02:17:10

标签: javascript alert

我想知道您可以将变量分配给警报吗?这到底意味着什么?例如,

var a = alert('test');  

我尝试了一下,当我调用它时,一旦页面加载,变量a仍为'undefined',警报就会弹出。 Aren我们假设它是一个匿名函数,里面有警告,如

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

如果我们想要触发某事的警报?为什么javascript允许你这样做?

4 个答案:

答案 0 :(得分:5)

var a = alert('test');

将此语句视为任何其他变量赋值。为了执行分配,首先评估右侧。在这种情况下,它是一个函数调用,因此调用该函数并获取其返回值。在alert的情况下,返回值为undefined。它没有返回任何东西。

然后将返回值分配给a,因此a最终会得到值undefined

作为语句的副作用,将显示警告消息。这是因为调用alert()并获取其返回值。

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

var a = foo(3);

此代码在结构上与警报调用类似,并且会导致a为6.但是alert()不会返回值。它更像是这样:

function bar(x) {
    return;
}

var a = bar(3);

现在aundefined

答案 1 :(得分:3)

var a = alert('test');  

这表示执行alert('test')并将该函数的返回值赋给名为a的变量。

这与以下内容没有什么不同:

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

其中max最终会以4作为执行Math.max(1,2,3,4)的返回值。


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

这表示声明一个匿名函数并将该函数对象分配给变量a。由于该函数刚刚声明,因此此时不会执行。您可以使用a()来执行它。

答案 2 :(得分:1)

您评论道:

  

我只是想知道为什么javascript允许我们这样做,如果它真的没有任何意义

嗯,只要语法有效,JavaScript(以及任何其他语言,包括英语)都可以让你做很多没有任何意义的东西。例如,下面的片段也没有任何意义:

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

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

如果您可以从某些功能中分配,而不是从其他功能分配,那么它是否会不那么一致?如果键入了语言,那会产生错误,但由于它不是,它有什么问题?如果他们没有返回值,则返回undefined,如果您尝试将其分配给变量,则不会中断。因此,您可以创建有时返回某些内容的函数,有时则不会。如果明智地使用,这可能是一个优势。这是一个功能,而不是语言的问题。

答案 3 :(得分:0)

如果你这样做:

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

然后你可以这样做:

a();

因为你已经定义了一个匿名函数..

警告是一项功能,因此您无法为其分配任何内容。

如果你想在变量有值时弹出一些东西,你可以做类似的事情 -

$(document).ready(function() { 
  if (someVar != undefined) {
    alert(someVar);
  }
});