我在想你能分配一个变量来提醒吗?它真的意味着什么?例如,Javascript分配变量来提醒
var a = alert('test');
我尝试过了,和警报后立即弹出网页加载其中可变a
仍然'undefined'
当我打电话吧。难道我们想使它成为匿名函数与警报里面像
var a = function(){ alert('test'); }
如果我们要触发的快讯?为什么JavaScript允许你这样做?
我在想你能分配一个变量来提醒吗?它真的意味着什么?例如,Javascript分配变量来提醒
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);
此代码是结构上类似于报警电话,并会导致a
是6.但是后来警报()没有返回值。它更像是这样的:
function bar(x) {
return;
}
var a = bar(3);
现在a
是undefined
。
如果你这样做:
var a = function(){ alert('test'); }
那么你可以这样做:
a();
因为你已经定义了一个匿名函数..
警报是一个函数,所以你不能分配任何东西,本身。
如果你想要的东西弹出,如果一个变量的值,你可以这样做 -
$(document).ready(function() {
if (someVar != undefined) {
alert(someVar);
}
});
var a = alert('test');
这是说执行alert('test')
,并从该函数的返回值赋值给一个变量名为a
。
这将是比没有不同:
var max = Math.max(1,2,3,4);
其中max
最终会与从执行Math.max(1,2,3,4)
返回值在它的值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
,如果尝试将其分配给变量,则不会有任何中断。所以你可以做出有时会返回某些东西的函数,有时候不会。如果明智地使用这可能是一个优点。这是一个功能,而不是语言的问题。
alert没有任何返回或其他方式返回'undefined',你想实现什么? – xdazz
我只是想知道为什么JavaScript允许我们这样做,如果它并不真正意味着什么。 – peter
@ user1389813:考虑一个函数,根据它的输入,它可能会返回一些东西,或者可能不会返回任何东西。您希望能够在返回值时存储返回值,但为了保持一致性,JavaScript还允许您在不返回任何内容时为其分配返回值。从不返回任何东西的函数也可以将其返回值分配给一个变量,以保持一致性。 – icktoofay