2012-01-06 101 views
2

我有一个关于Javascript变量声明的问题。 您能否告诉我下面两种定义方式有什么区别? 为什么alertMsg会以第一种方式执行,而不是以第二种方式执行? 在此先感谢。JavaScript变量声明的不同方法

// 1

var alertMsgInvoker = alertMsg ('hi there'); 
function alertMsg (msg) { 
     alert(msg); 
} 

// 2

var alertMsgInvoker = function() { 
     alertMsg ('hi there'); 
} 
function alertMsg (msg) { 
     alert(msg); 
} 

回答

3

在第一个示例中,您将调用alertMsg ('hi there');的结果分配给变量alertMsgInvokeralertMsg没有返回值alertMsgInvoker的事实既不在这里,也不在那里。

在第二个示例中,声明为alertMsgInvoker是一个函数,它在调用时调用函数alertMsg。为了获得相同的结果,在你的第一个例子,你的第二个需要阅读:

var alertMsgInvoker = function() { 
     alertMsg ('hi there'); 
} 
function alertMsg (msg) { 
     alert(msg); 
} 

// Now call alertMsgInvoker 
alertMsgInvoker(); 
+0

我明白了。 var alertMsgInvoker = function(){...}等于函数alertMsgInvoker(){...} - zjy2004ren刚才 – zjy2004ren 2012-01-06 12:33:29

+0

@ zjy2004ren - 基本上就是这样! :) – Rob 2012-01-06 12:34:29

3

你永远不会调用在第二个例子中的功能。你定义一些,但从来没有打电话给他们。

在第一个例子,你叫alertMsg当你定义alertMsgInvoker,在第二个定义调用alertMsg - 但既不调用的函数。

1

在第一种情况下,你与参数“你好”调用函数ALERTMSG();该函数被调用来触发警报功能。该函数不返回任何内容,但仍然将函数的返回值绑定到变量alertMsgInvoker。

在第二种情况下,您向varybel alertMsgInvoker声明一个函数,然后声明一个名为alertMsg的函数。你从来没有在这里发挥任何功能。这就是为什么第二个示例不显示警报框的原因。

+0

您确定该警报不会在第一个示例中触发? – 2012-01-06 12:24:47

+0

我的不好,用变量声明函数。 – 2012-01-06 12:27:09

1

第一种情况,您正在调用函数alertMsg,它返回undefined。

var alertMsgInvoker = alertMsg ('hi there'); 
// assign the return value (undefined) to variable alertMsgInvoker 

第二种情况,您刚刚定义了一个变量alertMsgInvoker,这是一个函数,但从未被调用。