我想知道您可以将变量分配给警报吗?这到底意味着什么?例如,
var a = alert('test');
我尝试了一下,当我调用它时,一旦页面加载,变量a
仍为'undefined'
,警报就会弹出。 Aren我们假设它是一个匿名函数,里面有警告,如
var a = function(){ alert('test'); }
如果我们想要触发某事的警报?为什么javascript允许你这样做?
答案 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);
现在a
是undefined
。
答案 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);
}
});