Если я хочу, чтобы функция выполняла что-то другое при первом запуске, я мог проверять каждый раз, когда она запускается, чтобы определить, является ли это в первый раз, или я могу изменить функцию; что-то вроде этого:Является ли самонастраивающаяся функция плохой?
foo=function(a,b){
...do something1...
foo=_foo;
}
_foo=function(a,b){
...do something2...
}
Это плохо; если да, то почему? Есть лучший способ сделать это? Я специально планирую реализовать это в javascript, хотя будут рассмотрены другие языковые точки.
Это действительно зависит от того, как вы хотите изменить функцию. Часто это используется для кэширования, поэтому это просто повышение производительности, которое пользователь функции не должен замечать. Если это так, тогда все в порядке. Если нет, вам, возможно, придется подробно остановиться на вашем конкретном случае. – kba
Обычно я использую статическую переменную (свойство) как флаг для обработки сценариев «первый раз» –
Почти всегда плохо. В тот же день мы будем писать самомодифицирующийся код для систем с ограниченными ресурсами, которых ваш браузер не один. Даже воспоминание не очень хорошее оправдание, ИМО, но это не технические дебаты. –