JavaScript回调:第206行的引用错误:未定义ouput2

JavaScript回调:第206行的引用错误:未定义ouput2,javascript,callback,Javascript,Callback,我试图创建一个函数,它接受两个回调,并返回一个布尔值,指示将值传递到第一个函数,然后将结果输出传递到第二个函数,是否会产生与相同操作相反的输出(将值传递给第二个函数,然后将输出传递给第一个函数) 我发现以下错误,我相信这可能是由于作用域,但不确定如何解决它:第206行的引用错误:未定义ouput2 function commutative(func1, func2, value) { //check to see if invoking cb1 on value then passing o

我试图创建一个函数,它接受两个回调,并返回一个布尔值,指示将值传递到第一个函数,然后将结果输出传递到第二个函数,是否会产生与相同操作相反的输出(将值传递给第二个函数,然后将输出传递给第一个函数)

我发现以下错误,我相信这可能是由于作用域,但不确定如何解决它:
第206行的引用错误:未定义ouput2

function commutative(func1, func2, value) {
  //check to see if invoking cb1 on value then passing output to cb2 as cb2 => cb1
  function func1() {
    let output1 = func1(value);
    return output1;
  }
  
  function func2() {
    let output2 = func2(output1);
      return output2;
  }
  
  function reverseOrder() {
    let output3 = func2(value);
    let output4 = func1(output3);
  }
  
    //return boolean
  if (ouput2 === output4) {
    return true;
    } else {
    return false;
  }
}
//测试用例:

 const multBy3 = n => n * 3;
 const divBy4 = n => n / 4;
 const subtract5 = n => n - 5;
 console.log(commutative(multBy3, divBy4, 11)); // should log: true
 console.log(commutative(multBy3, subtract5, 10)); // should log: false
 console.log(commutative(divBy4, subtract5, 48)); // should log: false

您从不调用内部函数,
output1
output2
等是在这些内部函数的本地定义的,在
可交换
范围内不可访问。此外,您正在覆盖
func1
func2
参数。请尝试以下操作:

函数可交换(func1,func2,value){
返回func2(func1(值))==func1(func2(值));
}
//测试用例:
常数multBy3=n=>n*3;
常数divBy4=n=>n/4;
常量减法5=n=>n-5;
log(可交换的(multBy3,divBy4,11));//应该记录:true
log(可交换的(multBy3,subtract5,10));//应该记录:false

log(可交换的(除法4,减法5,48));//应该记录:false
您从未调用内部函数,
output1
output2
等都是在这些内部函数的本地定义的,在
可交换的
范围内不可访问。此外,您正在覆盖
func1
func2
参数。请尝试以下操作:

函数可交换(func1,func2,value){
返回func2(func1(值))==func1(func2(值));
}
//测试用例:
常数multBy3=n=>n*3;
常数divBy4=n=>n/4;
常量减法5=n=>n-5;
log(可交换的(multBy3,divBy4,11));//应该记录:true
log(可交换的(multBy3,subtract5,10));//应该记录:false

log(可交换的(除法4,减法5,48));//应该记录:false
声明变量时,let关键字将在创建变量的范围内为其提供作用域。同时,如果要使用关键字var创建变量,即使在函数内,其作用域仍将是全局的,除非在此之前创建了use strictdeclaration@Sean这只适用于像这样的块语句一个
if
或一个
for
。在函数内部使用
var
仍将使其成为本地函数。要将其移动到外部作用域,您需要执行
var output1、output2、…;
(或
let
)在
可交换
函数的开头,不要在内部函数中使用任何
let
var
声明变量时,let关键字将在其创建的范围内为其提供一个作用域。同时,如果要使用关键字var创建变量,即使在函数中,其作用域仍将是全局的除非在此之前创建了使用严格declaration@Sean这只适用于块语句,如
if
for
。在函数内部使用
var
仍将使其成为局部的。要将其移动到外部作用域,您需要执行
var output1、output2等;
(或
let
)在
可交换
函数的开头,不要在内部函数中使用任何
let
var