我想知道您可以为警报分配一个变量吗?它的真正含义和作用是什么?例如,
var a = alert('test');
我试过了,一旦页面加载,当我调用它时变量a
仍然存在的地方就会弹出警报。'undefined'
难道我们不应该把它变成一个匿名函数,里面有警报吗?
var a = function(){ alert('test'); }
如果我们想触发某事的警报?为什么javascript允许你这样做?
我想知道您可以为警报分配一个变量吗?它的真正含义和作用是什么?例如,
var a = alert('test');
我试过了,一旦页面加载,当我调用它时变量a
仍然存在的地方就会弹出警报。'undefined'
难道我们不应该把它变成一个匿名函数,里面有警报吗?
var a = function(){ alert('test'); }
如果我们想触发某事的警报?为什么javascript允许你这样做?
var a = alert('test');
将此语句视为任何其他变量赋值。为了执行分配,首先评估右侧。在这种情况下它是一个函数调用,所以函数被调用并获得它的返回值。在警报的情况下,返回值为undefined
. 它不返回任何东西。
然后将返回值分配给a
,因此a
以 value 结束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);
wheremax
最终会将其中的值4
作为 execution 的返回值Math.max(1,2,3,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);
}
});