Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS:为什么第二个函数没有调用存储值?_Javascript_Closures - Fatal编程技术网

Javascript JS:为什么第二个函数没有调用存储值?

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

我正在尝试用以下内容实例化第一个函数:

设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(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,这难道不是一个闭包吗?