返回函数不使用变量

时间:2018-01-04 20:44:48

标签: javascript

基本上,我希望通过尽可能创建函数定义来更好地组织我的代码。当我尝试在当前范围之外创建一个新函数并返回该函数时,它会说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 个答案:

答案 0 :(得分:1)

函数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();

答案 1 :(得分:1)

我不确定你想要完成什么,但是如果你想要返回一个“看到”你的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的函数。