我想知道是否可以将变量分配给alert?这实际上意味着什么?例如,
var a = alert('test');
我试了一下,页面加载后警告框立即弹出,其中当我调用变量
a
时,它仍然是'undefined'
。我们不应该将其变成一个带有警告的匿名函数吗,就像这样:var a = function(){ alert('test'); }
如果我们想在某个事件上触发一个提醒,为什么javascript允许这样做?
我想知道是否可以将变量分配给alert?这实际上意味着什么?例如,
var a = alert('test');
a
时,它仍然是'undefined'
。我们不应该将其变成一个带有警告的匿名函数吗,就像这样:var a = function(){ alert('test'); }
如果我们想在某个事件上触发一个提醒,为什么javascript允许这样做?
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);
a
是undefined
。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()
来执行它。
嗯,JavaScript(以及包括英语在内的任何其他语言)都允许你做很多毫无意义的事情,只要语法是有效的。例如,下面的代码片段也毫无意义:我只是想知道为什么JavaScript允许我们这样做,即使它并没有真正意义
var a;
a = a; // so what?
function something() { /* nothing */ }
var b = something(); // very similar to your example!
如果您可以从某些函数中分配,而从其他函数中不能分配,那么这不是不一致吗?如果语言是有类型的,那么这将产生错误,但由于它没有类型,所以有什么问题呢?如果它们不返回值,则它们的返回值为undefined
,如果您尝试将其分配给变量,则不会出现任何问题。因此,您可以创建有时返回值,有时不返回值的函数。如果明智使用,这可能是一个优点。这是一项功能,而不是语言的问题。
如果您执行以下操作:
var a = function(){ alert('test'); }
然后你可以这样做:
a();
由于您定义了一个匿名函数...
alert是一个函数,因此您不能直接将任何内容分配给它。
如果您想要在变量具有值时弹出某些内容,可以尝试类似以下的操作 -
$(document).ready(function() {
if (someVar != undefined) {
alert(someVar);
}
});
undefined
,你想要实现什么? - xdazz