forEach 方法根据集合中元素的顺序，对每个元素都执行提供的 callback 函数一次。

## 语法

    mySet.forEach(callback[, thisArg])

### 参数

`callback`
  每个元素都会执行的函数
`thisArg`
  当执行callback函数时候，可以当作this来使用。

## 描述

这个forEach方法会针对集合中的每个元素执行提供的callback函数一次。 对于那些已经被删除的元素，它是不会执行的，但是，对于元素是undefined的情况则相反。

`callback` 有三个参数:

- 元素的值
- 元素的索引
- 将要遍历的集合对象

Set对象中没有索引值(keys)，前2个参数都是包含在`Set`中的元素的值(values)，所以该回调函数和`Map` 以及`Array`的forEach函数是一致的。

如果提供了一个thisArg参数给forEach函数，当被调用时，该参数将会传递到callback回调函数中来指代this值。否则，this值会是undefined。由回调所能观察到的this对象是根据通常的规则来决定的，这是由一个函数决定的。

forEach函数在第一次调用回调函数前确定所要处理的元素的范围。在调用forEach之后添加到Set对象的元素将不会被回调函数访问。如果Set对象的现有元素改变或者删除了，那么该元素传给回调函数的值会是forEach函数访问它们时的值。被删除的元素没有被访问。

`forEach`函数对每个Set对象的元素执行一次回调；它不会返回任何值。

## 例子

### 输出Set对象的内容

以下代码为Set对象中的每个元素记录一行:

    function logSetElements(value1, value2, set) {
        console.log("s[" + value1 + "] = " + value2);
    }

    new Set(["foo", "bar", undefined]).forEach(logSetElements);

    // logs:
    // "s[foo] = foo"
    // "s[bar] = bar"
    // "s[undefined] = undefined"

## 规范

Specification | Status | Comment
--- | --- | ---
ECMAScript 2015 (6th Edition, ECMA-262) Set.prototype.forEach | Standard | Initial definition.

## Browser compatibility

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!

- Desktop
- Mobile

Feature | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari
--- | --- | --- | --- | --- | ---
Basic support | 38 | 25.0 (25.0) | 11 | 25 | 7.1

Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile
--- | --- | --- | --- | --- | --- | ---
Basic support | 未实现 | 38 | 25.0 (25.0) | 未实现 | 未实现 | 8

## See also

- `Array.prototype.forEach()`
- `Map.prototype.forEach()`