javascript - 是否可以在 JavaScript 函数内从调用者的作用域访问变量?

标签 javascript variables ecmascript-6 scope closures

这个问题之前已经被问过,但所有热门问题都有 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/

相关文章:

Javascript - 如何用 promise 返回对象

javascript - 下拉菜单中的错误

python - 简单查询: Why does it say this variable is undefined?

reactjs - 当用户未登录时重定向到登录。 Reactjs

javascript - 回调函数给出错误 - angularjs

javascript - Cordova cordova-plugin-qrscanner : Opaque camera view

mysql - 如何使用mysql中的聚合函数为变量赋值?

node.js - Jade 中的变量包含原因

node.js - 如何将nodejs应用程序作为永远或 Upstart 的服务运行?

javascript - 可能访问 ES6 生成器返回值?