Javascript变量声明的不同方式

时间:2012-01-06 12:09:53

标签: javascript object

我对Javascript变量声明有疑问。 你能否告诉我以下两种定义方式有什么区别? 为什么alertMsg将以第一种方式执行而不是以第二种方式执行? 提前谢谢。

// 1

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

// 2

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

4 个答案:

答案 0 :(得分:3)

你永远不会在第二个例子中调用一个函数。你定义一些,但从不打电话给他们。

在第一个示例中,您在定义alertMsg时调用alertMsgInvoker,在第二个示例中定义一个调用alertMsg的函数 - 但不调用。{/ p>

答案 1 :(得分:3)

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

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

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

// Now call alertMsgInvoker 
alertMsgInvoker();

答案 2 :(得分:1)

在第一个场景中,您使用参数“hi there”调用函数alertMsg();调用该函数来触发警报功能。该函数不返回任何内容,但仍然将函数的返回值绑定到变量alertMsgInvoker。

在第二个场景中,您向variabel alertMsgInvoker声明一个函数,然后声明一个名为alertMsg的函数。你永远不会在这里解雇任何功能。这就是为什么第二个例子没有显示警告框。

答案 3 :(得分:1)

第一个场景,你正在调用返回undefined的函数alertMsg

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

第二种情况,你刚刚定义了一个变量alertMsgInvoker,这是一个函数但永远不会被调用。