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