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