日期:2014-05-16  浏览次数:20312 次

{{JS}}function语句
请问以下语句输出结果是:
alert(f(4));
var f = 0;
function f(x) {
    return x + 1;
}
alert(f);

答案是:
// 5
// 0

这里需要解释下原因——出现这种结果的原因是由于函数定义和变量定义发生在不同的时刻.
在JS中函数定义发生在解析时,而不是在运行时.当JS解析程序遇到一个函数定义时它就会解析并存储(而无需执行)构成函数主体的语句,然后定义一个和该函数同名的属性(如果函数定义嵌套在其它函数中,那么就会在调用对象中定义这个属性,否则在全局对象中定义这个属性)以保存它.

如上说法,你就能明白为什么JS中强调函数定义不能出现在if/while或其它语句中,如下
if(a === 1) {
    function get(param) {
        return param + 1;
    }
} else {
    function get(param) {
        return param + 2;
    }
}

由于函数定义发生在解析时,故get函数始终为第二个.