JavaScript访问内部和外部作用域中同名的局部变量
考虑到以下JavaScript:JavaScript访问内部和外部作用域中同名的局部变量,javascript,scope,Javascript,Scope,考虑到以下JavaScript: var someFunction = function(id) { //do some stuff var modifyId = function(id) { //do some stuff outer.id = id; //is there any way to modify the id variable in the outer scope from here? } } 如何修改从内部函数作用域传递到外部函数作用域的id?
var someFunction = function(id) {
//do some stuff
var modifyId = function(id) {
//do some stuff
outer.id = id; //is there any way to modify the id variable in the outer scope from here?
}
}
如何修改从内部函数作用域传递到外部函数作用域的id?为什么不能重命名其中一个变量?不幸的是,您不能。通过在嵌套函数
id
中命名参数,可以在外部函数中隐藏该参数。Javascript不包含用于访问隐藏名称的工具。唯一的选择是为其中一个变量选择不同的名称 没有。在一个函数中,没有办法(除了Mozilla的代码或ES5中的一些奇怪的东西)以任何显式的方式将作用域称为上下文,也没有办法以任何直接的方式提升词法作用域链
好问题
var someFunction = function(id) {
//do some stuff
var oid = id;
var modifyId = function(id) {
//do some stuff
// you can access the outer id via the oid variable
}
}
但是,是的,您应该只重命名一个形式参数。起初我认为这是可行的,但如果id是原语,它就不起作用了。从内部函数设置
oid=“BLAH”
不会更改id的值。如果它是一个对象,id和oid将指向同一个对象,这几乎是您想要的效果(您仍然无法通过调用oid={a:1}
@Juan Yes来更改对象id指向的对象。因为id是一个字符串(我假设),这意味着我的变通方法在这种情况下几乎毫无用处。因此,唯一的解决方案仍然是避免在嵌套函数中使用名称相同的形式参数。所有回复都是一个:你不能,你必须重命名其中一个