JavaScript将变量分配给警报

3

我想知道是否可以将变量分配给alert?这实际上意味着什么?例如,

var a = alert('test');  

我试了一下,页面加载后警告框立即弹出,其中当我调用变量a时,它仍然是'undefined'。我们不应该将其变成一个带有警告的匿名函数吗,就像这样:
var a = function(){ alert('test'); }

如果我们想在某个事件上触发一个提醒,为什么javascript允许这样做?


警告返回空或其他方式返回undefined,你想要实现什么? - xdazz
我只是在想为什么JavaScript允许我们这样做,即使它并没有真正意义。 - peter
考虑一个函数,根据其输入可能返回某些内容,也可能不返回任何内容。当它返回某些内容时,您希望能够存储返回值,但为了保持一致性,JavaScript 也允许在它不返回任何内容时分配其返回值。一个从未返回任何内容的函数也可以将其返回值分配给变量,同样是为了保持一致性。 - icktoofay
4个回答

5
var a = alert('test');

把这个语句看作是任何其他变量赋值一样。为了执行这个赋值,首先需要评估右侧。在这种情况下,它是一个函数调用,因此会调用该函数并获取其返回值。在alert的情况下,返回值是undefined。它不返回任何东西。

然后将返回值分配给a,因此a最终具有值undefined

作为语句的副作用,会显示一个警报消息。这是因为调用alert()并获取其返回值的结果。

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

var a = foo(3);

这段代码在结构上与alert调用类似,会导致a的值为6。但是alert()不会返回任何值。它更像是这样的:

function bar(x) {
    return;
}

var a = bar(3);

现在aundefined

3
var a = alert('test');  

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

这与以下代码没有区别:

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

执行Math.max(1,2,3,4)时,max将以值4的形式返回。


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

这段代码声明了一个匿名函数,并将该函数对象分配给变量a。由于函数只是被声明,所以此时不会执行。您可以在未来使用a()来执行它。


1
你发表了评论:

我只是想知道为什么JavaScript允许我们这样做,即使它并没有真正意义

嗯,JavaScript(以及包括英语在内的任何其他语言)都允许你做很多毫无意义的事情,只要语法是有效的。例如,下面的代码片段也毫无意义:
var a;
a = a; // so what?

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

如果您可以从某些函数中分配,而从其他函数中不能分配,那么这不是不一致吗?如果语言是有类型的,那么这将产生错误,但由于它没有类型,所以有什么问题呢?如果它们不返回值,则它们的返回值为undefined,如果您尝试将其分配给变量,则不会出现任何问题。因此,您可以创建有时返回值,有时不返回值的函数。如果明智使用,这可能是一个优点。这是一项功能,而不是语言的问题。


0

如果您执行以下操作:

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

然后你可以这样做:

a();

由于您定义了一个匿名函数...

alert是一个函数,因此您不能直接将任何内容分配给它。

如果您想要在变量具有值时弹出某些内容,可以尝试类似以下的操作 -

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接