javascript - 在 javascript 中使用可变 thisarg 或上下文有什么危险

标签 javascript

我是 javascript 的新手,想知道对 map、foreach 和 filter 等函数使用可变 thisarg 是否明智。

考虑以下问题

function increasingValueFn(i)
{
    if (this.highestValue < i)
    {
        this.highestValue = i;
        return true;
    }
    return false;
}

该函数将允许我们传入一个对象作为 thisarg,如以下示例所示。

var arr = [1, 2, 3, 2, 1, 5, 6, 7];

console.log(arr.filter(increasingValueFn, {highestValue: 0}));
// outputs [1, 2, 3, 5, 6, 7]

并使用相同的 increasingValueFn

var arr2 = ["cat", "dog", "aardvark", "zebra"];
console.log(arr2.filter(increasingValue, {highestValue: ""}));
// outputs ["cat", "dog", "zebra"]

这些都是简单的例子。想象这样一种情况,我们试图用非常复杂的包含规则创建一个更加任意的答案,在这种情况下,我们可以对我们的状态进行任意更改,然后运行一个基于返回是或否的状态的简单谓词。

但是,我没有在网上看到任何这样的例子,我意识到由于突变,这不太适合函数式编程。

但是我这样做从根本上是错误的吗?有没有更好的办法?

我是否应该传递一个隐藏变量内部状态的函数,而不是将状态作为 thisarg 传递?这将排除以下示例,该示例允许我们通过执行以下操作来部分评估状态:

var arr = [1, 2, 3, 2, 1, 5, 6, 7];
var arr1 = [3, 7, 9, 4, 2, 12];
var context = {highestValue: 0};

console.log(arr.filter(increasingValue, context));
// outputs [1, 2, 3, 5, 6, 7]

// now using the **same** context, continue with arr1
console.log(arr1.filter(increasingValue, context));
// outputs [9, 12]

最佳答案

这样读起来会更好

var increasingFrom = function(init) {
    var highestValue = init;
    return function(i) {
        if (highestValue < i) {
            highestValue = i;
            return true;
        }
        return false;
    };
}

console.log(arr.filter(increasingFrom(0)));

关于javascript - 在 javascript 中使用可变 thisarg 或上下文有什么危险,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34009812/

相关文章:

javascript - 引用DOM时脚本应该放在哪里?

javascript - 从 HTML 表单向 Node.js 服务器发送数据

javascript - 从文本区域复制到剪贴板问题 javascript

javascript - Internet Explorer Javascript 的 AppendChild 问题

在 Flask render_template 期间使用相对路径找不到 Javascript 文件

javascript - Typescript:表达函数实例属性

javascript - 我可以将 "new"匿名函数传递给 addEventListener

javascript - React js 生命周期方法不会在包装组件上触发

javascript - 使用 json_encode 进行 Google 图表显示

发布时的 Javascript 数组(AJAX)作为单个字符串接收