code: function forEachSetter(entry, names, callback) {
    var needToCheckNames = true;
  
    if (names === void 0) {
      names = Object.keys(entry.setters);
      needToCheckNames = false;
    }
  
    var nameCount = names.length;
  
    for (var i = 0; i < nameCount; ++i) {
      var name = names[i];
  
      if (needToCheckNames &&
          ! hasOwn.call(entry.setters, name)) {
        continue;
      }
  
      var setters = entry.setters[name];
      var keys = Object.keys(setters);
      var keyCount = keys.length;
  
      for (var j = 0; j < keyCount; ++j) {
        var key = keys[j];
        var value = getExportByName(entry, name);
  
        callSetterIfNecessary(setters[key], name, value, callback);
  
        var getter = entry.getters[name];
        if (typeof getter === "function" &&
            // Sometimes a getter function will throw because it's called
            // before the variable it's supposed to return has been
            // initialized, so we need to know that the getter function has
            // run to completion at least once.
            getter.runCount > 0 &&
            getter.constant) {
          // If we happen to know that this getter function has run
          // successfully, and will never return a different value, then we
          // can forget the corresponding setter, because we've already
          // reported that constant value. Note that we can't forget the
          // getter, because we need to remember the original value in case
          // anyone tampers with entry.module.exports[name].
          delete setters[key];
        }
      }
    }
  }
docs: Invoke the given callback once for every (setter, name, value) that needs to be called. Note that forEachSetter does not call any setters itself, only the given callback.