*bug/question*

**What is the current behavior?**

When there's a function that mentions itself wrapped with useCallback or useEffect, eslint-plugin-react-hooks will add the function to the list of dependencies causing no-use-before-define warnings

Example:

```js
const updateAndClean = useCallback(() => {
  console.log("update something")
  document.removeEventListener("event", updateAndClean);
});
```

The idea of the function above is to clean after itself when there's no need for the event anymore. I'm sure there are better ways to do that, but for the sake of the issue let's presume this is valid code.

eslint-plugin-react-hooks would propose adding "updateAndClean" to the list of dependencies:

```js
const updateAndClean = useCallback(() => {
  console.log("update something")
  document.removeEventListener("event", updateAndClean);
}, [updateAndClean]);
```
Causing no-use-before-define warning:
`Line 17:  'updateAndClean' was used before it was defined  no-use-before-define` 

Questions are:
- Is this ok to leave as is? would "using the function before defining it" break any useCallback optimisation? 
- Can eslint-plugin-react-hooks not automatically fix that since it causes other warnings?
- Knowing the function needs to run once, can I pass an empty array to useCallback?


return function(arg) {
        if (map.has(arg)) {
          
          
          return map.get(arg);
        }
        const result = fn(arg);
        map.set(arg, result);
        return result;
      };
    }
    return {
      FunctionExpression: visitFunctionExpression,
      ArrowFunctionExpression: visitFunctionExpression,
    };
    /**
     * Visitor for both function expressions and arrow function expressions.
     */
    function visitFunctionExpression(node) {