在嵌套函数中从上面的作用域访问javascript变量

在嵌套函数中从上面的作用域访问javascript变量,javascript,Javascript,以下是我的代码片段: function doSomething() { var clipId; funtion doSomethingElse(clipId) { this.clipId = clipId; } } 但是,这不起作用,因为this指向窗口对象,并且clipId不是全局变量,它是在doSomething函数中定义的 我知道我可以更改传递给第二个函数的参数的名称,例如,我可以将clipId参数的名称更改为clipId1,然后在第二个函数中执

以下是我的代码片段:

function doSomething() { 
    var clipId;
    funtion doSomethingElse(clipId) {
        this.clipId = clipId;
    }
}
但是,这不起作用,因为
this
指向窗口对象,并且
clipId
不是全局变量,它是在
doSomething
函数中定义的


我知道我可以更改传递给第二个函数的参数的名称,例如,我可以将
clipId
参数的名称更改为
clipId1
,然后在第二个函数中执行
clipId=clipId1
。但是,我不希望这样。我希望var和参数具有相同的名称。

我认为在不更改任何名称的情况下都没有办法做到这一点。如果使用局部变量从父作用域对变量进行阴影处理,则该变量将无法访问。

您可以使用setter

function doSomething() { 
    var clipId;
    function setClipId(value) {
        clipId = value;
    }
    function doSomethingElse(clipId) {
        setClipId(clipId);
    }
}
但我想你希望有一些语法可以在没有这些额外构造的情况下实现这一点。然后,正确的答案是imo。

由于JavaScript中的“闭包”,您根本不需要参数。 这将有助于:

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

因为
doSomethingElse()
的变量
clipId

我希望变量和参数具有相同的名称。为什么?更基本地说,我不知道如何调用
doSomethingElse
,因为它在
doSomething
之外是不可访问的。为什么需要使用相同的变量名称?
doSomethingElse
位于
d中o方法
scope,为什么需要传递一个已经可用的
clipId
?当然,但是为了适应OP造成的一个完全没有意义的条件,你已经费了这么多的劲,那就是他莫名其妙地想要用相同的名称故意对变量进行阴影处理。OP实际的需要可能发生了在一个更复杂的背景下。如果我想为他的案件详细说明一些更好的解决方法,我可以问他更多的背景,或者我给出一些可能适合他的答案。我不认为这个片段准确地反映了他的实际背景。对。我们要求了更多的背景,但他还没有回答。让我们等待。