【发布时间】:2010-01-15 15:30:47
【问题描述】:
我是 Javascript 新手,对函数声明的工作方式感到困惑。我对此进行了一些测试,得到了一些有趣的结果:
say();
function say()
{
alert("say");
}
前向声明有效并弹出“说”
对面
say();
say = function()
{
alert("say");
}
没用,虽然它也声明了一个函数对象
如果我们声明函数并在之后重新声明:
function say()
{
alert("speak");
}
say();
function say()
{
alert("say");
}
我得到的是“说”而不是“说”。太惊喜了!
好的。似乎只有最新的函数声明有效。然后让我们先声明函数对象,然后是“常规”函数:
say = function()
{
alert("speak");
}
say();
function say()
{
alert("say");
}
say();
另一个惊喜,它是“说话”,然后是“说话”。 “常规”函数声明根本不起作用!
对所有这些都有解释吗?而且,如果“常规”函数声明真的那么“脆弱”并且可以很容易地被同名的函数对象覆盖,我应该远离它吗?
另一个问题是:只有函数对象格式,这种前向声明是不可能的吗?有没有办法在 Javascript 中“模拟”它?
【问题讨论】:
标签: javascript function declaration forward-declaration