Replying to [comment:1 AzaToth]:
The problem is if you forget to include the assignment altogether. This isn't that uncommon if code is moved from one function to another. If the original function defines self and the new function doesn't, you could have a problem. In some cases, it's not obvious that the code is broken, because you may not get errors as an undefined self will reference window (try running window.self === window in a console). This could lead to storing values on the window instead of the plugin instance, and your plugin would continue to work properly, but would leak data into the global scope. Using a name other than self reduces the chances of this mistake going unnoticed.