2012-09-12 27 views
3

我在想你能分配一个变量来提醒吗?它真的意味着什么?例如,Javascript分配变量来提醒

var a = alert('test'); 

我尝试过了,和警报后立即弹出网页加载其中可变a仍然'undefined'当我打电话吧。难道我们想使它成为匿名函数与警报里面像

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

如果我们要触发的快讯?为什么JavaScript允许你这样做?

+0

alert没有任何返回或其他方式返回'undefined',你想实现什么? – xdazz

+0

我只是想知道为什么JavaScript允许我们这样做,如果它并不真正意味着什么。 – peter

+0

@ user1389813:考虑一个函数,根据它的输入,它可能会返回一些东西,或者可能不会返回任何东西。您希望能够在返回值时存储返回值,但为了保持一致性,JavaScript还允许您在不返回任何内容时为其分配返回值。从不返回任何东西的函数也可以将其返回值分配给一个变量,以保持一致性。 – icktoofay

回答

5
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); 

现在aundefined

0

如果你这样做:

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

那么你可以这样做:

a(); 

因为你已经定义了一个匿名函数..

警报是一个函数,所以你不能分配任何东西,本身。

如果你想要的东西弹出,如果一个变量的值,你可以这样做 -

$(document).ready(function() { 
    if (someVar != undefined) { 
    alert(someVar); 
    } 
}); 
2
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()

1

你的评论:

我只是想知道为什么JavaScript允许我们这样做,如果它并不真正意味着什么

那么,JavaScript的(以及任何其他语言,包括英语)只要语法有效,就可以做很多并不意味着什么的东西。例如,片段波纹管也没啥意思:

var a; 
a = a; // so what? 

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

岂不是不太一致,如果你可以从一些功能他人转让,但不能?如果语言是键入的,那会产生一个错误,但由于它不是,它有什么问题?如果它们没有返回值,那么它们的返回值为undefined,如果尝试将其分配给变量,则不会有任何中断。所以你可以做出有时会返回某些东西的函数,有时候不会。如果明智地使用这可能是一个优点。这是一个功能,而不是语言的问题。