Javascript: 对相邻对象的函数调用?
Javascript: Function call on adjacent object?
您将不得不原谅我,因为我确信这已在其他地方解决,但我不知道如何称呼这段语法或此示例说明的概念。这个 get() 函数如何知道我传递给它的参数是指相邻数组的索引?我没有给 get() 任何指示我指的是什么对象,除非将一个对象直接放在它旁边的括号中有这种效果。这个对吗?这里是否有一个更广泛的概念,我不知道涉及邻近和函数调用?
function get(prop) {
return function(obj) {
return obj[prop]
}
}
get(1)([1,2,3]);
// output = 2
您刚刚遇到了早期 JS 程序员最容易混淆的概念之一。它被称为 "closure"。 MDN 有关于此主题的 good article。
但一般来说,您可以考虑 get
返回一个新方法,其中 prop
的值 "saved" 与 get
时的值相同首次被调用。
如果我们重命名一些东西并将其分解,您提供的代码示例可能会得到最好的理解:
function createFunctionToReturnValueForProp(prop) {
return function(obj) {
return obj[prop]
}
}
var getPropertyFor1 = createFunctionToReturnValueForProp(1);
var array1 = [1,2,3];
var array2 = [4,5,6];
var obj = { "0": "foo", "1": "bar" };
getPropertyFor1(array1); // 2
getPropertyFor1(array2); // 5
getPropertyFor1(obj); // "bar"
如果像这样将 get(1)([1,2,3])
分成两行可能更有意义:
var get1Function = get(1);
get1Function([1,2,3])
// output = 2
注意:执行此行后
var get1Function = get(1);
get1Function
现在设置为 function(obj) { return obj[1] }
这里没有魔法。你有一个函数 returns 一个函数。当您调用 get(2)
时,返回的函数具有 2
作为 prop
的值。您的代码本质上等同于:
var fn = get(2);
// fn = function(obj) {
// return obj[2]
// }
fn([1,2,3]);
// => 3
您将不得不原谅我,因为我确信这已在其他地方解决,但我不知道如何称呼这段语法或此示例说明的概念。这个 get() 函数如何知道我传递给它的参数是指相邻数组的索引?我没有给 get() 任何指示我指的是什么对象,除非将一个对象直接放在它旁边的括号中有这种效果。这个对吗?这里是否有一个更广泛的概念,我不知道涉及邻近和函数调用?
function get(prop) {
return function(obj) {
return obj[prop]
}
}
get(1)([1,2,3]);
// output = 2
您刚刚遇到了早期 JS 程序员最容易混淆的概念之一。它被称为 "closure"。 MDN 有关于此主题的 good article。
但一般来说,您可以考虑 get
返回一个新方法,其中 prop
的值 "saved" 与 get
时的值相同首次被调用。
如果我们重命名一些东西并将其分解,您提供的代码示例可能会得到最好的理解:
function createFunctionToReturnValueForProp(prop) {
return function(obj) {
return obj[prop]
}
}
var getPropertyFor1 = createFunctionToReturnValueForProp(1);
var array1 = [1,2,3];
var array2 = [4,5,6];
var obj = { "0": "foo", "1": "bar" };
getPropertyFor1(array1); // 2
getPropertyFor1(array2); // 5
getPropertyFor1(obj); // "bar"
如果像这样将 get(1)([1,2,3])
分成两行可能更有意义:
var get1Function = get(1);
get1Function([1,2,3])
// output = 2
注意:执行此行后
var get1Function = get(1);
get1Function
现在设置为 function(obj) { return obj[1] }
这里没有魔法。你有一个函数 returns 一个函数。当您调用 get(2)
时,返回的函数具有 2
作为 prop
的值。您的代码本质上等同于:
var fn = get(2);
// fn = function(obj) {
// return obj[2]
// }
fn([1,2,3]);
// => 3