如何在作用域链中覆盖/劫持引用?
如果我在另一个文件(node Env)中有一个函数:
const name = 'name_local'
export default () => { return name }我想从另一个文件中导入该函数,但要覆盖它对name的引用,并传递一个新的引用:
import nameFunc from '../otherFile'
const name = 'hijacked name reference'
nameFunc() // 'hijacked name reference'发布于 2017-02-24 02:22:22
你不能,语言并没有为你提供这样做的机制。
这句话看起来微不足道,但事实就是这样:语言不允许你这样做。在规范方面,尽管函数可以访问其封闭的词法环境记录,该记录具有name的绑定,但该引用(实际上,一般的词法环境记录)不会向脚本代码公开(甚至不允许在实现中直接存在;它们是一种规范机制)。所以没有办法从函数中获取信息,所以也没有办法改变它。
发布于 2017-02-24 02:31:43
只需这样做:
const name = 'name_local';
export default (input = name) => { return input }其他文件:
import nameFunc from '../otherFile'
const name = 'name_other';
nameFunc(name)https://stackoverflow.com/questions/42423334
复制相似问题