首页 > 解决方案 > 是否可以将值从函数返回到函数参数?js

问题描述

所以我注意到,当您使用时,.addEventListener()您可以像这样获取它的事件数组:

document.getElementById("elementID").addEventListener("click",function(event) {
 console.log(event);
});

有什么办法可以像这样创建自己的功能吗?我以前试过这个,但我完全忘记了我是怎么做到的。

现在我正在尝试

function foo(do) {
 let a = 0;
 setTimeout(do,1);
 return a;
}

foo(function(a) {
 console.log(a);
});

(结果undefined

标签: javascript

解决方案


您可以将额外的参数传递给setTimeout,但请注意,更新函数中的值不会将其传播回来(还要注意do是保留关键字,因此我将名称更改为fn

function foo(fn) {
 let a = 0;
 setTimeout(fn,1,a);
 return a;
}

const result = foo(function(a) {
 console.log(a);
 a += 1
});

console.log(result);

因此,您可以改为传递一个对象,并更新该对象确实会传播更改:

function foo(fn) {
 let a = {value:0};
 //setTimeout(fn,1,a);
 fn(a)
 return a.value;
}

const result = foo(function(a) {
 console.log(a);
 a.value += 1
});

console.log(result);

但请注意,我必须取出setTimeout并用直接调用替换它fn(a)- 如果我将它留在里面,该函数将在调用之前返回fn

function foo(fn) {
 let a = {value:0};
 setTimeout(fn,1,a);
 return a.value;
}

const result = foo(function(a) {
 console.log(a);
 a.value += 1
});

console.log(result);


推荐阅读