2016-02-27 55 views
-2

这里是我的代码片段:访问的JavaScript变种以上嵌套函数

function doSomething() { 
    var clipId; 
    funtion doSomethingElse(clipId) { 
     this.clipId = clipId; 
    } 
} 

但是,这并不工作,因为this点窗口对象,clipId不是一个全局变量,它被定义在doSomething函数中。

我知道我可以改变,我传递给第二个函数的参数的名称,因此,例如,我可以在第二function.But更改名称的clipId参数来clipId1,然后就去做clipId = clipId1,我不要那样。我希望var和参数具有相同的名称。

+1

*我想var和参数具有相同的名称。 *。为什么?更基本上,我看不出你怎么能够调用'doSomethingElse',因为它不能在'doSomething'之外访问。 – 2016-02-27 17:22:15

+0

为什么你需要有一个相同的变量名?'doSomethingElse '在'doSomething'范围内,为什么你需要传递一个已经可用的'clipId'? –

回答

2

我不认为有一种方法可以在不更改任何名称的情况下做到这一点。如果使用局部变量从父作用域中映射变量,则变得无法访问。

0

您可以使用setter。

function doSomething() { 
    var clipId; 
    function setClipId(value) { 
     clipId = value; 
    } 
    function doSomethingElse(clipId) { 
     setClipId(clipId); 
    } 
} 

但我想你希望有一些语法允许做这些没有那些额外的结构。然后,正确的答案是Matti's one imo。

+0

当然,但你已经去了所有这些麻烦,以适应是由OP提出的完全无意义的条件,这是他莫名其妙地想要故意使用相同的名称来映射变量。 – 2016-02-27 17:27:28

+0

OP的实际需要可能发生在更复杂的环境中。如果我想为他的案例阐述一些更好的解决方法,或者我给出可能适合他的一些答案,我可以问他更多的背景。我不认为这个片段恰恰反映了他的实际情况。 –

+0

对。我们已经要求更多的背景,但他还没有回答。我们等等吧。 – 2016-02-27 17:37:11

0

由于JavaScript中的“关闭”,您根本不需要参数。 这将工作:

function doSomething() { 
    var clipId; 
    funtion doSomethingElse() { 
     this.clipId = clipId; 
    } 
} 

因为doSomethingElse()访问在其范围内的变量(在这种情况下,doSomething()的变量clipId