我是 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();
另一个惊喜,是“speak”之后是“speak”。“常规”函数声明根本不起作用!
对所有这些都有解释吗?而且,如果“常规”函数声明真的那么“脆弱”并且可以很容易地被同名的函数对象覆盖,我应该远离它吗?
另一个问题是:只有函数对象格式,这种前向声明是不可能的吗?有没有办法在Javascript中“模拟”它?