在不同范围执行功能:Javascript

Execute function on different scope: Javascript

所以我认为这是不可能的,但我想知道... 有没有办法创建像这样工作的函数?

const someFunction=()=> console.log(a); //printing some ref that is not out of this scope;

const wrappedFn = wrapFnOnScope(someFunction,{a:"Hello World!"});

wrappedFn() // prints Hello World!

您似乎混淆了变量属性。变量是在代码中赋予值的临时名称。 属性 是存储在对象中的键值对。

如果你想创建一个简单地从对象中提取特定 属性 的函数,你可以这样做:

const bird = { wings: 2, color: "red" };
const getColor = value => value.color;
const birdColor = getColor(bird); // "red"

其次,您试图提前为函数分配参数,但只是为了稍后执行该函数。这可以通过将函数调用包装在不带参数的函数中来完成,如下所示:

const a = 1;
const b = 2;
const c = 3;

const delayedApplication = () => console.log(a + b + c);
// nothing happened yet
delayedApplication();
// "6" has been logged to the console

这确实是不可能的。 JavaScript 具有词法范围,这意味着闭包中变量的范围(仅)取决于您定义函数的位置。之后无法更改。

如果要后期绑定,需要使用JavaScript中的参数。可能是

const someFunction = (obj) => console.log(obj.a);
someFunction({a: 'Hello World'});
// or
const wrappedFunction = () => someFunction({a: 'Hello World'});
const wrappedFunction = someFunction.bind(undefined, {a: 'Hello World'});

或使用隐式第零参数this:

function someFunction() { console.log(this.a); }
someFunction.call({a: 'Hello World'});
// or
const wrappedFunction = () => someFunction.call({a: 'Hello World'});
const wrappedFunction = someFunction.bind({a: 'Hello World'});

如果您坚持在 someFunction 中引用 a 变量,请使用解构

const someFunction = ({a}) => console.log(a);
function someFunction() { const {a} = this; console.log(a); }

甚至可怕的 with 语句(坏主意!),但最终你必须在 someFunction 中执行此操作。没有魔法wrapFnOnScope.