我有这样一个函数创建器:
var creator = function(param) {return function(){
debugger;
}}
现在,当我创建函数时:
var f = creator(123);
并运行它:
f();
我无法从 Debug模式获取param
。
在此版本的创建者中:
var creator = function(param) {return function(){
var param = param;
debugger;
}}
param
在 Debug模式下是 undefined
,但在这种情况下:
var creator = function(param) {return function(){
var a = param;
debugger;
}}
a
和 param
值均等于 123
。
规则是说创建者的参数何时在创建的函数中可用以及何时不可用?
最佳答案
如果您不创建任何具有重复名称的变量,它们就可用。在第一种情况下,您使用相同的名称(从 root 开始向下),这会覆盖 param
。
参数也是变量。我们看看吧。当您传递参数时,请考虑它将像这样声明
function(){
var param = 123: // 123 is passed.
return function() {
...
}
}
然后,当你完成 var param = param
后,它会执行类似这样的操作。
function(){
var param = 123: // 123 is passed.
return function() {
var param; // here you redefine param, which shadows the upper one, so param is now undefined
param = param;
}
}
这就是为什么您会得到具有相同名称的 undefined
和具有不同名称的正确值。
关于javascript - 函数创建者的参数何时在创建的函数中可用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42113208/