javascript - 如何获得绑定(bind) `this` 和封闭变量?

标签 javascript

是否有可能从函数中获取绑定(bind)到 this 的所有内容以及所有封闭变量?

例如

 function f() { console.log(this); }
 let x = f.bind(7);
 function g() { console.log(x); }
  1. 是否可以从 x 中提取 7

  2. gx 上关闭。是否可以从 g 获取封闭变量数组?

最佳答案

Is it possible to extract that 7 from x?

没有。 f 必须明确地为您提供检索this 的方法(例如,function f() { return this; })。既然没有,你就不能。

在规范术语中,您询问是否可以从函数中检索 [[BoundThis]] 内部槽的值。 [[BoundThis]] 在规范中只出现了三次: Where bound function exotic objects被描述,他们的[[Call]] internal operation被描述,process of creating them在哪里被概述。因此,不在允许您检索值的操作中。

g closes over x. Is it possible to get array of closed-over variables from g?

没有。 :-) 就拥有私有(private)信息和公共(public) API 而言,这是一件好事。

提供这将需要一种方法来访问 lexical environment 中的绑定(bind)列表附加到 g 及其所有外部词法环境的对象。规范中没有。


没有规范不能添加其中一个或两个的原因,但我认为(这只是我个人的猜测)TC39(决定这些事情的委员会)将很难推销第一次和第二次几乎不可能卖出(这对实现产生了巨大的负面影响)。

关于javascript - 如何获得绑定(bind) `this` 和封闭变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41553374/

相关文章:

javascript - uneval() 和 .toSource() 有什么区别

javascript - 在 main.js 和附加到选项卡的脚本之间正确使用 port.emit 和 port.on

javascript - 随机图像高度不起作用?

javascript - 导入 React 与 React,{ 组件 }

javascript - 使用 knockout.js 在 select 上使用值绑定(bind)更新整个对象?

javascript - 如何在动态生成单选按钮上应用样式表?

javascript - 在 RJ ERB 模板中输出 HTML

javascript - 为什么未找到匹配项时计数会失败?

javascript - 使用 apply 调用 console.log

javascript - 如何将这行 Jquery 转换为纯 Javascript?