Wei*_*ang 11 javascript declaration function forward-declaration
我是Javascript的新手,并对函数声明的工作方式感到困惑.我对此做了一些测试并得到了一些有趣的结果:
say();
function say()
{
alert("say");
}
Run Code Online (Sandbox Code Playgroud)
前进声明工作和弹出"说"
相反
say();
say = function()
{
alert("say");
}
Run Code Online (Sandbox Code Playgroud)
没有工作,虽然它也声明了一个函数对象
如果我们声明该函数并在之后重新声明:
function say()
{
alert("speak");
}
say();
function say()
{
alert("say");
}
Run Code Online (Sandbox Code Playgroud)
我得到"说"而不是"说话".这太令人惊讶了!
好.似乎只有最新的函数声明才有效.然后让我们首先声明函数对象,然后是"常规"函数:
say = function()
{
alert("speak");
}
say();
function say()
{
alert("say");
}
say();
Run Code Online (Sandbox Code Playgroud)
另一个惊喜,是"说话",然后是"说话"."常规"功能声明根本不起作用!
是否有所有这些的解释?并且,如果"常规"函数声明真的是"脆弱的"并且可以通过具有相同名称的函数对象轻松覆盖,那么我应该远离那个吗?
另一个问题是:只使用函数对象格式,前向声明是否变得不可能?有没有办法在Javascript中"模拟"它?
您可以预期您的函数定义将按顺序应用。然后,所有非方法代码行都将按顺序执行,包括函数对象的赋值。这解释了你的每个例子。但这是一个有趣的问题。您确实无法在尝试调用函数对象后对其进行赋值,并期望它能够工作。然而,可执行代码后面的函数定义实际上将首先被应用。
| 归档时间: |
|
| 查看次数: |
5827 次 |
| 最近记录: |