2012-09-30 66 views
2

对于下面的函数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层的功能的名称)从该函数调用的内部,而不是外部。

这是对的jsfiddle:http://jsfiddle.net/5MSTU/

回答

3

如果外部函数是全球性的,你可以针对它作为window对象的成员。

window.sayHello(); 

否则,您需要使用不同的名称。 JavaScript允许你隐藏变量,所以与外部变量名称相同的内部变量有效地禁止访问外部变量。

+0

如果脚本环境是node.js,那么是否也适用? –

+0

或者创建一个指向外部函数的局部变量,并将用作别名。 – Greg

+0

@AndersonGreen:是的,除了全局变量对象是用'global'标识符而不是'window'引用的。 'global.sayHello()'。 –

-1

--updated去除明显的错误代码是这里 -

你可以别名它前面。但我不知道这是多么有用。

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(); 

​ 
+0

这将调用函数内部的函数,而不是函数外部的函数。这里是jsfiddle:http://jsfiddle.net/hTQLW/ –

+2

一定要测试你的代码。你没有创建你期望的别名。另外你实际上在初始化之前调用别名(这是内部函数),导致* TypeError * –

+1

下面是解释器如何看你的代码:http://jsfiddle.net/S2qHv/声明是有效的重新排列为本例中显示的顺序。 –