3

我想知道您可以为警报分配一个变量吗?它的真正含义和作用是什么?例如,

var a = alert('test');  

我试过了,一旦页面加载,当我调用它时变量a仍然存在的地方就会弹出警报。'undefined'难道我们不应该把它变成一个匿名函数,里面有警报吗?

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

如果我们想触发某事的警报?为什么javascript允许你这样做?

4

4 回答 4

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

现在aundefined

于 2012-09-12T02:24:24.153 回答
3
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().

于 2012-09-12T02:22:22.437 回答
1

你评论说:

我只是想知道为什么javascript允许我们这样做,如果它真的没有任何意义

好吧,只要语法有效,JavaScript(和任何其他语言,包括英语)就可以让你做很多没有任何意义的事情。例如,下面的片段也没有任何意义:

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

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

如果您可以从某些功能分配而不是从其他功能分配,那会不会不太一致?如果输入了语言,那会产生错误,但既然不是,那有什么问题呢?如果它们不返回值,则它们的返回值为undefined,如果您尝试将其分配给变量,则不会中断。因此,您可以创建有时会返回某些内容的函数,有时则不会。如果使用得当,这可能是一个优势。这是一个功能,而不是语言的问题。

于 2012-09-12T02:33:47.873 回答
0

如果你这样做:

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

然后你可以这样做:

a();

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

alert 是一个函数,所以你不能给它分配任何东西,本质上。

如果你想在变量有值的情况下弹出一些东西,你可以做类似的事情 -

$(document).ready(function() { 
  if (someVar != undefined) {
    alert(someVar);
  }
});
于 2012-09-12T02:20:28.970 回答