Javascript:对相邻对象的函数调用?
您必须原谅我,因为我确信这在其他地方得到了解决,但我不知道该如何称呼这段语法或这个示例所说明的概念。这个get()函数如何知道我传递给它的参数引用了相邻数组的索引?我没有给get()任何表示我所指对象的指示,除非将对象直接放在它旁边的括号中会产生这种效果。这是正确的吗?这里是否有一个更广泛的概念,我不知道涉及到邻近性和函数调用Javascript:对相邻对象的函数调用?,javascript,functional-programming,closures,Javascript,Functional Programming,Closures,您必须原谅我,因为我确信这在其他地方得到了解决,但我不知道该如何称呼这段语法或这个示例所说明的概念。这个get()函数如何知道我传递给它的参数引用了相邻数组的索引?我没有给get()任何表示我所指对象的指示,除非将对象直接放在它旁边的括号中会产生这种效果。这是正确的吗?这里是否有一个更广泛的概念,我不知道涉及到邻近性和函数调用 function get(prop) { return function(obj) { return obj[prop] } } get(1)([1,2,
function get(prop) {
return function(obj) {
return obj[prop]
}
}
get(1)([1,2,3]);
// output = 2
您刚刚遇到了早期JS程序员最容易混淆的概念之一。这叫做“结束”。MDN在这个主题上有自己的观点 不过,一般来说,您可以考虑
get
返回一个新方法,其中prop
的值已“保存”为第一次调用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]}
这里没有魔法。您有一个返回函数的函数。调用get(2)
时,返回的函数具有2
作为prop
的值。您的代码基本上与此等效:
var fn = get(2);
// fn = function(obj) {
// return obj[2]
// }
fn([1,2,3]);
// => 3
所以,我想说清楚一点;'get(1)([1,2,3])将数组作为参数传递给get函数。我只是不知道为什么它的工作方式与get(1,[1,2,3])不同,get(1,[1,2,3])返回“函数匿名(obj)”。Get()只接受一个参数,所以我理解为什么传入两个参数不起作用,但在我看来,如果Get()接受两个参数,那么这个->Get(1,[1,2,3])匿名函数(obj)实际上数组根本不会传入Get函数。这里有两个独立的函数调用。get(1)([1,2,3])将1传递给get函数,该函数返回另一个函数,该函数在数组[1,2,3]中传递时立即调用