在不同范围执行功能: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
.
所以我认为这是不可能的,但我想知道... 有没有办法创建像这样工作的函数?
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
.