代码之家  ›  专栏  ›  技术社区  ›  Valachio

返回函数未使用变量

  •  -2
  • Valachio  · 技术社区  · 7 年前

    基本上,我想通过尽可能创建函数定义来更好地组织代码。当我尝试在当前范围之外创建一个新函数并返回它时,它会说 x y 未定义。

    我知道这肯定与范围界定有关。是否可以像下面的第二段代码那样组织代码?或者我必须在正确的范围内声明我的函数。

    # Works
    function RandomFunction() {
        x = 1;
        y = 1;
        marker.addEventListener('click', function(x, y) {
            return function() {
                console.log(x+y);
            }
        }
    }
    

    # Not working
    function RandomFunction() {
        x = 1;
        y = 1;
        marker.addEventListener('click', function(x, y) {
            return add;
        }
    }
    
    function add() {
        console.log(x+y);
    }
    
    2 回复  |  直到 7 年前
        1
  •  1
  •   Akyuna Akish    7 年前

    函数add需要将每个数字作为参数传入(firstNum、secondNum)。

    函数RandomFunction可以将x和y声明为事件侦听器作用域上方的变量。然后,当click事件被激活时,RandomFunction作用域中的x和y将传递给add函数,add函数可以引用这些值作为firstNum和secondNum。

    此外,不需要在click事件的回调函数中返回函数“add”。

    function RandomFunction() {
        var x = 1;
        var y = 1;
    
        marker.addEventListener('click', function() {
            add(x, y);
        });
    }
    
    function add(firstNum, secondNum) {
        console.log(firstNum + secondNum);
    }
    
    RandomFunction();
    
        2
  •  1
  •   ThanosSar    7 年前

    我不确定您想要实现什么,但如果您想要返回一个“看到”您的x,y并可以在此处对其进行操作的函数,那么它就是:

    function RandomFunction() {
      var x = 1;
      var y = 1;
      marker.addEventListener('click', function() {  
        // (add(x, y))(); this will give you 2 in console
        return add(x, y); // this will return a function that when you execute it will give 2 as result
      })
    
    }
    
    function add(x, y) {
      return function() {
        console.log(x + y);
      }
    }
    RandomFunction();
    

    我不确定您想做什么,但这将返回一个函数,该函数在单击标记时可以访问您的x,y。