在这种情况下如何解决非法调用类型错误?

时间:2016-05-16 12:57:38

标签: javascript function return

在解决编程挑战时,我编写了一个函数,该函数旨在将函数作为参数并返回函数。返回的函数用于执行参数函数(传递给第一个函数)。函数的代码: -

function func1(f){
  let func2 = function(){
    if(/*a condition based on a global variable*/){
      f();
    }
  }
  return func2;
}

这目前无法正常工作,它会引发Illegal Invocation Type Error。我看到this问题,但我不知道如何将它的答案与我的代码联系起来。所以,我的问题是: -

      
  • 为什么我的代码不起作用?   
  • 我能做些什么才能让它发挥作用?

<小时/>

修改

我正在调用这样的函数: -

var someFunc = func1(alert);
someFunc("foo");
someFunc("bar");

2 个答案:

答案 0 :(得分:2)

你需要处理

  • 函数调用的上下文
  • 参数
  • 返回值

这是一个实现:

function func1(f, context){
  let func2 = function(){
    if( some condition ){
      return f.apply(context, arguments);
    } // there probably should be some "else" behavior...
  }
  return func2;
}

使用一些示例:

var fun = func1(console.log, console);
fun("A", 25); // logs "A", 25
fun = func1(alert);
fun("foo");   // alerts "foo"

答案 1 :(得分:-1)

为什么不使用var代替let

function func1(f){
  var func2 = function(){
    if(/*a condition based on a global variable*/){
      f();
    }
  }
  return func2;
}