【问题标题】:How to call a function only once for a specific argument in JavaScript?如何为 JavaScript 中的特定参数只调用一次函数?
【发布时间】:2020-07-24 17:06:01
【问题描述】:

我有一个带有两个参数的简单函数。

<script>
function addError(element, error_msg) {
    element.insertAdjacentHTML("afterend", "<div class='error'>" + error_msg + "</div>");
}
</script>

当我们使用诸如 -addError(elem_1, "Error message"); 之类的参数调用此函数时,我想要它。此函数不应使用相同的第一个参数(elem_1) 再次调用。它可以用不同的参数调用,但不能用相同的first argument(elem_1)调用。我该怎么做?

【问题讨论】:

  • @hev1 我是 javascript 新手,所以我无法理解您的代码。如果有任何简单的方法可以做到这一点,我很想知道。
  • 我的方法很简单。你不明白哪一部分?

标签: javascript function arguments


【解决方案1】:

您可以使用WeakSet 来存储调用该函数的第一个参数。

function uniquifyFirstArg(fn){
    const set = new WeakSet;
    return function(first, ...rest){
        if(!set.has(first)){
            set.add(first);
            fn(first, ...rest);
        }
    }
}
const addError = uniquifyFirstArg(function(element, error_msg) {
    element.insertAdjacentHTML("afterend", "<div class='error'>" + error_msg + "</div>");
});
addError(document.body, "This is an error");
addError(document.querySelector('body'), "Not shown");
.error {
  color: red;
}

【讨论】:

  • 如果只为参数传递对象,最好使用WeakSet 以避免内存泄漏
  • @Bergi 不错的建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-24
  • 2012-08-23
  • 2010-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-19
相关资源
最近更新 更多