Javascript 调用与内部函数同名的外部函数

Javascript 调用与内部函数同名的外部函数,javascript,Javascript,对于下面的函数doStuff,是否可以调用sayHello(在函数doStuff之外),即使它与内部函数同名 var sayHello = function(){ alert("Called from outside the function"); } function doStuff(){ sayHello(); function sayHello(){ alert("Called from inside the function. How can I

对于下面的函数doStuff,是否可以调用sayHello(在函数doStuff之外),即使它与内部函数同名

var sayHello = function(){
    alert("Called from outside the function");
}
function doStuff(){
    sayHello();
    function sayHello(){
        alert("Called from inside the function. How can I call the sayHello function that is outside the scope of doStuff?");
    }
}
    doStuff();
​
在上面的Javascript代码中,函数sayHello(2个函数的名称)是从函数内部而不是外部调用的


这里它位于JSFIDLE上:

如果外部函数是全局函数,则可以将其作为
窗口的成员来定位

window.sayHello();
否则,您将需要使用不同的名称。JavaScript允许您对变量进行阴影处理,因此与外部变量同名的内部变量实际上会禁用对外部变量的访问。

--更新以删除此处的错误代码--

你可以在前面加上别名。但我不知道这有多有用

var sayHello = function(){
    alert("Called from outside the function");
};

var aliasForSayHello = sayHello;

function doStuff() {
    function sayHello(){
        alert("Called from inside the function. How can I call the sayHello function that is outside the scope of doStuff?");
       aliasForSayHello();
    }       

    sayHello();

}

doStuff();

​

如果脚本环境是node.js,是否同样适用?或者创建一个指向外部函数的局部变量,并将作为别名。@AndersonGreen:是,除了全局变量对象是用
全局
标识符而不是
窗口
引用之外
global.sayHello()
@Greg:但是如果它已经被隐藏,则无法使用局部变量引用外部变量,除非外部变量是在全局环境中定义的。这将调用函数内部的函数,而不是函数外部的函数。在JSFIDLE上:确保测试代码。您没有创建预期的别名。此外,您实际上在初始化别名(内部函数的别名)之前调用它,导致类型错误。下面是解释器如何看待您的代码:声明被有效地重新排列为本例中所示的顺序。有时候没有答案总比错误的好:(我们每天都可以得到一个答案。)