Javascript JS:为什么第二个函数没有调用存储值?
我正在尝试用以下内容实例化第一个函数: 设foo=first22 这将分别注销console.log22、value和console.log77、newVal 编辑: 如何在其中执行第二个函数Javascript JS:为什么第二个函数没有调用存储值?,javascript,closures,Javascript,Closures,我正在尝试用以下内容实例化第一个函数: 设foo=first22 这将分别注销console.log22、value和console.log77、newVal 编辑: 如何在其中执行第二个函数 function first(value) { console.log(value, "value") let newVal = value + 55; console.log(indigo, "indigo") return function second(secon
function first(value) {
console.log(value, "value")
let newVal = value + 55;
console.log(indigo, "indigo")
return function second(secondArgPassed) {
return newVal + secondArgPassed
}
}
let foo = first(22);
foo(34)
第二个函数从第一个函数返回 第一个函数的返回值被分配给foo 因此:foo或foo带有一些参数 为什么第二个函数没有被调用的存储值 因为: 你一点也不叫它 您将一个名为newVal的变量定义为second的一个参数,该参数在first的更大范围内屏蔽了使用let声明的名为newVal的变量。
首先,我不确定你在这里想要实现什么 首先调用的函数有一个参数。在这个函数中,您已经创建了另一个函数,它不会做任何事情,因为您没有调用它。靛蓝也没有定义
function first(val){
return val
}
function second(val){
return val+22;
}
console.log(first(22));
console.log(second(55));
您可以在函数中调用此函数,并检查下例中存在的第二个参数,它只需要存在:
function first(val, newval){
console.log(val, "value");
if(!!newval){
console.log(val+55,"value");
}
}
first(22,22);
/* outputs:
"22","value"
"77","value"
*/
关于javascript范围,值得一读:
您的第二个函数是第一个函数的本地函数,不会被调用。所以我不需要newVal作为第二个函数的参数?这要看情况而定。你想在调用second时将一个值作为参数传递给它吗?理想情况下,我宁愿传递一个arg,然后将其作为arg传递,这会使使用闭包的整个想法毫无意义。我只是在上面进行了编辑并重写了它。这种重写有意义吗?除了新的参数外,它还依赖于第一个func中的newVal,这难道不是一个闭包吗?