JS:使用直接传递给函数的参数作为嵌套函数的参数
JS: Using an argument passed to a function directly as a parameter of a nested function
我在 SO 中搜索了这个问题,但似乎找不到它:如何将被调用函数中的参数 直接 传递给嵌套函数?比如拿下面的代码,来自"Eloquent Javascript:"
var dayName = function() {
var names = ["Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"];
return function(number) {
return names[number];
};
}();
console.log(dayName(3));
// → Wednesday
参数3
传递给dayName()
,但是dayName()
不直接接受任何参数。参数如何传递给嵌套的返回函数?如果嵌套函数本身没有返回,而是返回了一个值,这会有什么不同?
最后,考虑这个伪代码,其中两个参数被传递给 dayName()
函数,dayName()
函数及其嵌套函数都接受参数:
var dayName = function(param) {
console.log(param);
(function(otherParam) {
console.log(otherParam);
});
};
dayName(outerFunctionParam, innerFunctionParam);
将一个参数传递给 dayName()
函数并将第二个参数传递给嵌套函数的正确语法是什么?它在幕后如何工作?谢谢!
问题是 dayName 赋值结束时的括号。当 dayName 被赋值给末尾的括号时,这个返回的函数被赋值给 dayName,而不是外部函数本身。
var a = function ( ) {
return 1;
}
var b = a; // the function a is assigned to b
var b = a(); // the function is executed hence the value returned by a is stored in b. That is 1
请看一下:
更新
var dayName = function(param1, param2) {
console.log('param 1: ' + param1);
(function(otherParam) {
console.log('param 2: '+otherParam);
})(param2);
};
dayName(1); // 1, undefined
dayName(1,2); // 1,2
这是一个很好的问题!它取决于 dayName 函数是一个立即调用的函数表达式 (IFFE)
因此它立即被调用。
如果你在函数的末尾使用 ();
,就像这样,它将按照你的想法工作
var dayName = function() {
var names = ["Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"];
return function(number) {
return names[number];
};
}(); // take that '()' out and this function will just return a function
// with it on, it Immediately calls the function, returning 'Wednesday'
如果我们重写没有匿名函数的例子,这将是这样的:
var theAnonymousFunction = function() {
var names = ["Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"];
return function(number) {
return names[number];
};
}; // no () here
var dayName = theAnonymousFunction();// call the anonymouse function to get a function(number) as returned object
console.log(dayName(3));
dayName 函数是一个带有私有变量的闭包。您通过
访问该数组 var
return names[number];
内部函数。将数字传递到名称中以声明要获取数组中的哪个值。
本质上这就是正在发生的事情
var dayName = function(number) {
return names[number];
};
names 变量是私有的,只能由函数访问。所以 return names 进入函数并获取该 var 以供使用。
您的代码。
var dayName = function() {
var names = ["Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"];
return function(number) {
return names[number];
};
}();
第二个问题…………
您的具有多个参数的 dayName 函数将只使用第一个参数,因为第二个参数从未在函数中声明过。你会得到一个未定义的错误。
var dayName = function(param, otherParamNeedsToBeDeFinedHere) {
参数是在函数中声明和使用的变量。您可以创建尽可能多的内容,但不必在代码中全部使用它们。
dayName(2);
// and
dayName(2,4);
如果函数至少有两个参数,则两者都有效。
您的代码。
var dayName = function(param) {
console.log(param);
(function(otherParam) {
console.log(otherParam);
});
};
dayName(outerFunctionParam, innerFunctionParam);
我在 SO 中搜索了这个问题,但似乎找不到它:如何将被调用函数中的参数 直接 传递给嵌套函数?比如拿下面的代码,来自"Eloquent Javascript:"
var dayName = function() {
var names = ["Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"];
return function(number) {
return names[number];
};
}();
console.log(dayName(3));
// → Wednesday
参数3
传递给dayName()
,但是dayName()
不直接接受任何参数。参数如何传递给嵌套的返回函数?如果嵌套函数本身没有返回,而是返回了一个值,这会有什么不同?
最后,考虑这个伪代码,其中两个参数被传递给 dayName()
函数,dayName()
函数及其嵌套函数都接受参数:
var dayName = function(param) {
console.log(param);
(function(otherParam) {
console.log(otherParam);
});
};
dayName(outerFunctionParam, innerFunctionParam);
将一个参数传递给 dayName()
函数并将第二个参数传递给嵌套函数的正确语法是什么?它在幕后如何工作?谢谢!
问题是 dayName 赋值结束时的括号。当 dayName 被赋值给末尾的括号时,这个返回的函数被赋值给 dayName,而不是外部函数本身。
var a = function ( ) {
return 1;
}
var b = a; // the function a is assigned to b
var b = a(); // the function is executed hence the value returned by a is stored in b. That is 1
请看一下:
更新
var dayName = function(param1, param2) {
console.log('param 1: ' + param1);
(function(otherParam) {
console.log('param 2: '+otherParam);
})(param2);
};
dayName(1); // 1, undefined
dayName(1,2); // 1,2
这是一个很好的问题!它取决于 dayName 函数是一个立即调用的函数表达式 (IFFE)
因此它立即被调用。
如果你在函数的末尾使用 ();
,就像这样,它将按照你的想法工作
var dayName = function() {
var names = ["Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"];
return function(number) {
return names[number];
};
}(); // take that '()' out and this function will just return a function
// with it on, it Immediately calls the function, returning 'Wednesday'
如果我们重写没有匿名函数的例子,这将是这样的:
var theAnonymousFunction = function() {
var names = ["Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"];
return function(number) {
return names[number];
};
}; // no () here
var dayName = theAnonymousFunction();// call the anonymouse function to get a function(number) as returned object
console.log(dayName(3));
dayName 函数是一个带有私有变量的闭包。您通过
访问该数组 varreturn names[number];
内部函数。将数字传递到名称中以声明要获取数组中的哪个值。
本质上这就是正在发生的事情
var dayName = function(number) {
return names[number];
};
names 变量是私有的,只能由函数访问。所以 return names 进入函数并获取该 var 以供使用。
您的代码。
var dayName = function() {
var names = ["Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday"];
return function(number) {
return names[number];
};
}();
第二个问题…………
您的具有多个参数的 dayName 函数将只使用第一个参数,因为第二个参数从未在函数中声明过。你会得到一个未定义的错误。
var dayName = function(param, otherParamNeedsToBeDeFinedHere) {
参数是在函数中声明和使用的变量。您可以创建尽可能多的内容,但不必在代码中全部使用它们。
dayName(2);
// and
dayName(2,4);
如果函数至少有两个参数,则两者都有效。
您的代码。
var dayName = function(param) {
console.log(param);
(function(otherParam) {
console.log(otherParam);
});
};
dayName(outerFunctionParam, innerFunctionParam);