Цитата: 
	
  | 
	
		
 Цитата: 
	
 Цитата: 
	
 Может быть это и изыск, но, согласитесь, удобнее)  | 
	
		
 Цитата: 
	
  | 
	
		
 Цитата: 
	
 Зачем тогда придумали слово constructor вместо имени класса? И какой подход к реализации был бы правильным?  | 
	
		
 
<script>
function factorial(x)
{
    var result = 1;
    while (x > 1) result *= x--;
    return result;
}
alert(factorial(5));
</script>
пример факториала честно, полноту вашей задачи я до сих пор не понял хотите избавится от рекурсии используйте циклы конструктор служит для иницииализации "И какой подход к реализации был бы правильным?" тот, который понятен другим разработчикам. Чтобы они не ломали голову в раскручивани вызовов ваши функций. Код должен быть простым и понятым  | 
	
		
 Цитата: 
	
 Цитата: 
	
 Цитата: 
	
 Скорей Y-комбинатор и замыкания вынесут моск)) PS И потом, как сделать, чтобы код был понятен другим разработчикам, прочитать много умных книг, сходить на разные «курсы», которых сейчас расплодилось как собак нерезаных? Это, положим, можно, есть ли там стандарты и правила написания правильного кода, как узнать?  | 
	
		
 Цитата: 
	
  | 
	
		
 
class Test1 {}
class Test2 {
    get name(){ return this.constructor.name}
}
const Test3 = function () {}
const Test4 = function () {
    this.name =()=> this.constructor.name
}
const a = new Test1();
const b = new Test2();
const c = new Test3();
const d = new Test4();
console.log(a.constructor.name);
console.log(b.constructor.name);
console.log(c.constructor.name);
console.log(d.constructor.name);
console.log(b.name);
console.log(d.name());
console.log(Test1.name);
не знаю, может это поможет  | 
	
		
 Malleys, просто пишет чушь ради чуши. 
	Например хипстерское дерьмо, типа: 
const factorial = x => {
	if (x === 1)
		return 1;
	else
		return x * factorial(x - 1);
}
alert(factorial(5));
 после чего решает проблему которой нет.Нормальный человек напишет: 
function factorial(x) {
	if (x === 1)
		return 1;
	else
		return x * factorial(x - 1);
}
 и это будет работать всегда.Даже если мы потом сделаем так: 
function factorial(x) {
	if (x === 1)
		return 1;
	else
		return x * factorial(x - 1);
}
const f = factorial;
alert(f(5));
 или так: 
// factorial-module.js
function factorial(x) {
	if (x === 1)
		return 1;
	else
		return x * factorial(x - 1);
}
export default factorial;
// main.js
import f from './factorial-module';
alert(f(5));
Если мы хотим пулять функцию по разным переменным сразу после создания, но при этом не хотим засорять область видимости её оригинальным названием(почему?), то всегда можно сделать так: 
const factorial = function fcallee(x) {
	if (x === 1)
		return 1;
	else
		return x * fcallee(x - 1);
}
const f = factorial;
const f2 = factorial;
alert(typeof fcallee);
alert(factorial(5));
alert(f(5));
alert(f2(5));
Нет никакой проблемы и никакого смысла в arguments.callee, и уж точно нет смысла в онанизме от Malleys.  | 
	
		
 Цитата: 
	
 Цитата: 
	
 Цитата: 
	
 Цитата: 
	
 Цитата: 
	
 Цитата: 
	
 Вот, например, более практическая задача, чем вычисление факториалов, на примере которой демонстрируется рекурсия... Обход всех текстовых узлов в DOM 
var Y=f=>(g=>x=>f(g(g))(x))(g=>x=>f(g(g))(x));
var processTextNodes = visit => Y(order => node => {
	if(node != null) node.childNodes.forEach(childNode =>
		childNode.nodeType === Node.TEXT_NODE ? visit(childNode) : order(childNode)
	)
});
var logTextNotes = processTextNodes(console.log);
logTextNotes(document.body);
 Poznakomlus, попробуйте избавиться от рекурсии и вы закончите кодом, про который не скажешь, что он, по сравнению с этим — простой, понятный и краткий!Aetae, то, что вы описали, работает с обычными функциями (и это хорошо!), а не со стрелочными. Зависит от имени... const factorial = x => x === 1 ? 1 : x * factorial(x - 1);Y-комбинатор позволяет убрать такую зависимость... 
import { Y } from "combinators-js";
const factorial = Y(f => x => x === 1 ? 1 : x * f(x - 1));
 | 
| Часовой пояс GMT +3, время: 04:44. |