这个问题之前已经被问过,但所有热门问题都有 5 年以上的历史了,我很想知道自那时以来是否有任何变化。如果你有一个定义在某处的函数
const accessParentScope = () => parentVariable;
那么有什么方法可以从调用函数的范围访问 parentVariable
吗?最终目标是做类似的事情
function createAnotherScope() {
const parentVariable = 'some value';
return accessParentScope();
}
并且让 accessParentScope()
可以访问 parentVariable
无需将其作为参数显式传递。
或者,是否可以从闭包范围访问变量?如果你有一个像
这样的函数function createClosure() {
const parentVariable = 'some value';
return closure = () => null;
}
那么你能做一些类似createClosure().parentVariable
的事情吗?这里的语法显然行不通,但我很好奇是否有可能实现这样的远程操作。
最佳答案
Is it possible to access a variable from the caller's scope inside a function in JavaScript?
没有。那将是 dynamic scope 。大多数语言(包括 JavaScript)都实现 lexical scope 。这不会改变。
有this
,但它是一个显式传递的参数。 this
的值(在大多数情况下)是在调用函数时确定的,而不是定义函数的时间或地点(箭头函数对待 this
但不同)。
function logName() {
console.log(this.name);
}
function sayFoo() {
logName.call({name: 'foo'});
}
sayFoo();
function sayBar() {
logName.call({name: 'bar'});
}
sayBar();
正如您所看到的,与使用参数定义函数相比,这确实没有任何优势:
function logName(name) {
console.log(name);
}
function sayFoo() {
logName('foo');
}
sayFoo();
function sayBar() {
logName('bar');
}
sayBar();
正如 @JaromandaX 在他们的评论中所说,这就是参数的含义,在调用时向函数提供值。
关于javascript - 是否可以在 JavaScript 函数内从调用者的作用域访问变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49164105/