Heim >Web-Frontend >js-Tutorial >Anonyme Funktionen sind ein zweischneidiges Schwert mit Vor- und Nachteilen
Als funktionale Programmiersprache können Sie sich die wichtige Stellung und große Rolle von Funktionen in JavaScript vorstellen. Doch obwohl es großen Komfort bietet, bringt es zwangsläufig auch große Probleme mit sich.
Anonyme Funktionen sind ein zweischneidiges Schwert. Sie machen funktionale Programmiersprachen perfekter und machen den Code schwieriger zu lesen. Sie sollten wissen, dass anonyme Funktionen mit einem enormen semantischen Aufwand verbunden sind.
Wenn eine Funktion keinen Namen hat, spielt das möglicherweise keine Rolle und sie verliert in den meisten Szenarien ihre Bedeutung. Der Name der Funktion ist derselbe wie Ihr Name, der Name Ihres Freundes und der Ihres Haustieres. Es ist wichtig, warum sollten Sie ihn sonst schreiben?
Die Verwendung benannter Funktionen selbst an den unnötigsten Stellen kann von großem Wert sein
Sie haben es wahrscheinlich einfach zur Hand Zählen Sie viele Szenarien auf, um die Zweckmäßigkeit anonymer Funktionen zu beweisen. Es ist unbestreitbar, dass einige Szenarien zweifellos etwas Wahres haben, aber die meisten Menschen nutzen dies als Ausgangspunkt und tun keine guten Taten. Es gibt zum Beispiel viele Beispiele für
Array.some, Array.forEach, String.replace
. Wir können auch mit Sicherheit sagen, dass sie keine benannten Funktionen verwenden müssen Anonyme Funktionen zu verwenden ist praktisch und jeder macht es. Aber vergessen Sie nicht, dass einige, forEach und replacement selbst bereits eine breite Semantik haben. Aber Sie können noch einen Schritt weiter gehen:
1.Array.some, die allgemeine Semantik besteht darin, herauszufinden, ob einige im Array vorhanden sind, aber was genau sind einige?
2.Array.forEach, die breite Semantik ist Traversal. Warum haben Sie sich für ForEach anstelle von Map, Every usw. entschieden?
3.String.replace, die allgemeine Semantik ist Ersetzen, aber was genau wird durch was ersetzt?
Code ist so geschrieben, dass die Leute ihn lesen können,
1. Können Sie mich nicht Ihren Code lesen und aus dem Array erraten oder ableiten, was Sie herausfinden möchten? Gibt es einen Nullwert?
2. Können Sie mir direkt über den Funktionsnamen sagen, was Sie durch das Durchlaufen dieses Arrays tun möchten?
3. Können Sie mir direkt durch den Funktionsnamen sagen, was Sie ersetzen möchten?
Als einfaches Beispiel: Finden Sie heraus, ob das Preisarray einen ganzzahligen Preis enthält. isInteger ist möglicherweise eine vorhandene öffentliche Funktion. Wenn nicht, haben Sie sie, nachdem Sie sie übergeben haben. Es ist prägnant und leicht zu lesen. Einige Codes müssen nicht gelesen werden. Was ist, wenn ein Fehler auftritt? isInteger ist testbar und einfach zu testen. Wenn Sie Bedenken haben, führen Sie einen Unit-Test durch. Möglicherweise haben Sie bemerkt, dass durch eine kleine Änderung ein Teil des Codes testbar geworden ist. Auch wenn dies keine öffentliche Funktion ist, ist es übersichtlicher und testbarer, sie als benannte Funktion zu schreiben.
var isAnyInteger = priceArr.some(Common.isInteger.bind(Common));
Dies sind sehr extreme Beispiele, bei denen anonyme Funktionen direkt geschrieben werden können, aber es ist offensichtlich, dass sie sehen können Sie können auch als Grenzen benannter Funktionen behandelt werden, das heißt, das Schreiben benannter Funktionen schadet nicht und ist nur besser.
Egal wie einfach der Code ist, Architektur und Implementierung müssen unterschieden werden
Ein weiteres Katastrophengebiet ist das Damals Funktion, eine anonyme Funktion Der Code kann nicht hässlicher sein. Auch wenn jeder ihn so schreibt, sollten Sie verstehen, dass Sie ihn nicht so schreiben können. Die richtige Haltung sollte als Beispiel dienen
/* * name : getOrder * description : 获取订单数据 */function getOrder() {//{{{var url = 'https://www.qunar.com/getOrder';//假如收集参数比较费劲,应该用一个函数专门去收集参数var params = getOrderParams();//假如参数体比较庞大,应该先将其赋予一个变量var params = { orderNo:'248663058'};//无论如何,现将参数赋予变量你都将获得在这里打印变量方便调试的便利console.log('getOrder url & params:', url, params);return $.post(url, params); }//}}}/* * name : renderOrder * description : 拿订单,拿到就在页面上展示出来,拿不到就告诉用户为什么没拿到 */function renderOrder() {//{{{//高级函数,只安排工作,不自己实现//getOrder() 对该函数来说是不可见的,它要的只是订单数据,偷得抢的都可以 getOrder().then(render, remindUser); }//}}}function render() {//{{{}//}}}function remindUser() {//{{{}//}}}
Sie waren von Anfang an leitender Architekt, schreiben aber nur nebenberuflich Code
Das kann man deutlich sehen Dass, Durch die umfassende Verwendung benannter Funktionen ist die Codestruktur sehr klar. Jeder kann die zu implementierende Funktion leicht verstehen. Diese benannten Funktionen sind wie das Skelett eines Hauses, und wenn man sie darauf stapelt, entsteht das Skelett eines Gebäudes. Haben Sie schon einmal gesehen, wie ein Architekturdesigner die Wände selbst baute und Zement darauf goss? Das Gleiche gilt für das Schreiben von Code. Was die Implementierung jeder Funktion betrifft, helfen Sie mir bitte bei der Implementierung (wenn Sie zum ersten Mal lernen, werden Sie gebeten, selbst bei der Implementierung zu helfen).Das obige ist der detaillierte Inhalt vonAnonyme Funktionen sind ein zweischneidiges Schwert mit Vor- und Nachteilen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!