Heim Web-Frontend js-Tutorial js-Funktionsrückruf

js-Funktionsrückruf

Aug 06, 2019 pm 04:35 PM
js

In der normalen Front-End-Entwicklungsarbeit werden beim Schreiben von js an vielen Stellen Funktionsrückrufe verwendet.

Das einfachste Beispiel ist:

<script language="javascript" type="text/javascript">
function doSomething(callback) {
if(typeof callback == "function") {
callback();
}
} 
 
function foo() {
alert("我是回调后执行的函数");
} 
 
doSomething(foo); /*正确*/
doSomething(function(){
alert("我是回调后执行的函数");
}); /*正确*/
doSomething("foo"); /* 这样是不行的,传入的是一个字符串,不是一个函数名 */
</script>
Nach dem Login kopieren

Das Obige kann nur ohne Parameter zurückrufen (es sei denn, Sie kennen die Parameter der Rückruffunktion im Voraus). Wenn die Funktion unbekannte Funktionen hat, kann dies nicht der Fall sein einfach.

Erweiterte Methoden:

1. Verwenden Sie die Aufrufmethode von Javascript

function doSomething(callback,arg1,arg2) {
callback.call(this,arg1,arg2);
}
function foo(arg1,arg2) {
alert(arg1+":"+arg2);
}
doSomething(foo,1,2); /* 弹出了1:2 */
Nach dem Login kopieren

2. Verwenden Sie die Apply-Methode von Javascript

betrachtet als call Es ist im Grunde dasselbe wie apply. Der Unterschied besteht darin, dass call Parameter nur einzeln übergeben kann und apply nur Parameter in einem Array übergeben kann.

Ihre ersten Parameter sind alle Bereiche. Wenn dies beispielsweise oben übergeben wird, bedeutet dies, dass es den gleichen Bereich wie die Funktion „doSomething“ hat. also den gesamten Fensterbereich.

3. Clevere Verwendung von apply

apply kann auch als Ausführungsfunktion einer Funktion betrachtet werden, bei der es sich um eine Funktion handelt, die zum Ausführen einer bestimmten Funktion verwendet wird. Sie werden also feststellen, dass viele Dinge, die ursprünglich kompliziert waren, manchmal so einfach werden, wenn Sie „Apply“ richtig anwenden.

Zum Beispiel wird die Push-Methode eines Arrays mit apply aufgerufen:

var arr1=[1,3,4];

var arr2=[3,4 ,5];

Wenn wir arr2 erweitern und dann nacheinander an arr1 anhängen möchten, sei schließlich arr1=[1,3,4,3,4,5]

arr1 .push(arr2 ) ist offensichtlich nicht möglich. Denn wenn Sie dies tun, erhalten Sie [1,3,4,[3,4,5]]

Wir können eine Schleife nur verwenden, um einen nach dem anderen zu pushen (natürlich können Sie auch arr1.concat(arr2) verwenden. , aber die Concat-Methode ändert arr1 selbst nicht)

function doSomething(callback,args) {
callback.apply(window,args);
}
function foo(arg1,arg2) {
alert(arg1+":"+arg2);
}
doSomething(foo,[1,2,3]); /* 弹出了1:2 */
Nach dem Login kopieren
Seit es Apply gibt, sind die Dinge so einfach geworden

Array.prototype.push.apply(arr1, arr2)

Eine Codezeile löst das Problem. Das Prinzip ist, dass Array.prototype.push die Push-Funktion des Arrays ist, die angibt, dass arr1 der Bereich ist, der dem Aufruf von arr1 entspricht Push-Funktion des Arrays.

Und arr1 ist tatsächlich ein Array, also kann es aufgerufen werden, und arr2 repräsentiert das Array von Parametern. Daher entspricht die obige Anweisung: arr1.push(3,4,5). (

Die Push-Funktion unterstützt die Übergabe mehrerer Eingabeparameter, was auch eine Voraussetzung für die Verwendung von apply hier ist)

Die obige Anweisung kann auch geschrieben werden als: arr1.push.apply(arr1, arr2 ); Beide Die beiden sind völlig gleichwertig, da arr1.push die Push-Funktion von arr1 darstellt, die die Push-Funktion des Arrays ist.

Wenn Sie call verwenden, ist es wie Array.prototype.push.call(arr1, arr2[0], arr2[1]...), offensichtlich ist es immer noch angemessen, es anzuwenden.

Wenn Sie immer noch fragen, warum verwenden Sie nicht einfach arr1.push(3,4,5)? Es ist nicht so, dass arr2 beim nächsten Mal nicht geändert werden kann [3,4,5].

Um die größte Zahl im Array zu erhalten, können Sie auch Apply verwenden, um die Math.max-Funktion

var arr1=[1,3,4];

aufzurufen Alert (Math.max.apply(window,arr1)); /* Der Bereich muss kein Fenster sein, auch wenn er null ist, Math.max.apply(this,arr1), Math.max.apply(null, arr1) */

4. Praktische Beispiele für Funktionsrückrufe bei der Arbeit

Mit der oben genannten Grundlage können Sie die gekapselten JS-Rückruffunktionen bei der Arbeit verstehen

Hintergrund: Seite A muss Seite B verwenden, um ein Element auszuwählen, und bringt dann die Informationen zu diesem Element auf Seite A zurück. Seite A bereichert sich anhand dieser Informationen.

Seite A:

var arrLen=arr2.length
for(var i=0;i<arrLen;i++){
    arr1.push(arr2[i]);
}
Nach dem Login kopieren

Seite B:

noticeInfo = {
selectProject: function () {
var win = newsee.ui.window
win.show(&#39;项目列表&#39;, &#39;../Project/ProjectSelectList.html?callback=noticeInfo.setProjectInfo&#39;, { size: win.winSizeType.big })
//在当前页面弹出框,框里面是另一个页面,地址后面带上需要回调的函数名
//注意这两个页面其实都是在一个页面里面的,并不是像window.open()那样出现了新窗口,所以两个页面的js都是可见的
},
setProjectInfo: function (obj) {
//回调函数,将选择好的项目对象传进来,然后丰富自己的页面
$(&#39;#projectName&#39;).val(obj.name)
$(&#39;#projectID&#39;).val(obj.id)
}
}
Nach dem Login kopieren

newsee.util.url.back-Funktion ist wie folgt:

function SelectBack() {
var callback = newsee.util.url.getQuery(&#39;callback&#39;); //获取页面参数callback,这里获取到的是"noticeInfo.setProjectInfo",是个字符串
var arr = newsee.ui.grid.getSelectedBack(&#39;datagrid&#39;) //获取选择的项目,这个不用深究
if (!arr.length) {
return newsee.ui.window.alert(&#39;请选择项目!&#39;)
}
newsee.util.url.back(callback, arr[0]) //重点来了,这里执行回调,将需要回调的函数名和入参传进来,arr[0]就是选择的项目的对象的数组了(它也是个数组,里面就一个对象)
}
Nach dem Login kopieren

newsee.callFunc-Funktion ist wie folgt:

back : function (funcName) {
// / <param name="funcName" type="String">返回时执行的方法,一般为重新绑定</param>
 
var isWindow = typeof $$winClose === 'function',// 是否为弹窗
args // 弹窗返回方法参数
 
if (isWindow) {// 弹窗的返回方法
$$winClose()
 
args = [].slice.call(arguments) //arguments大家应该都知道的吧,它可以用来获取函数的实参,它类似数组又不是数组,这句代码就是把它转换成数组,因为apply的入参需要是个数组才行
//args现在里面有两个元素,args[0]=callback,就是之前传进来的回调函数名,args[1]=arr[0],就是回调函数的入参
newsee.callFunc.apply(newsee, args) //执行 newsee.callFunc 函数,作用域就是newsee自己(等同于newsee自己调用callFunc函数),参数是args
} 
}
Nach dem Login kopieren
ok, die Funktion, die zurückgerufen werden muss, wird ausgeführt. Informationen zum Abrufen dieser Funktion basierend auf dem Funktionsnamen in Zeichenfolgenform finden Sie unten.

callFunc: function(funcName, arg) {
var func = typeof funcName === 'function' ? funcName : this.findItem(window, funcName) //上面我有提到过,doSomething("foo"); 传入的是一个字符串,不是一个函数名,所以无法执行
//同样的道理,现在funcName=args[0]=callback="noticeInfo.setProjectInfo",是个字符串,不能直接调用apply,需要变成函数
//这句话就是用来判断funcName是不是一个函数,如果不是,就在window作用域里根据funcName找到这个函数,然后赋给func
if (typeof func === 'function') {
//此时func已经是个函数了,就是页面A里定义的noticeInfo.setProjectInfo()
try {
return func.apply(window, arg) //执行需回调的函数,作用域依然是window,反正这个函数在window里肯定能找到,参数就是arg=args[1]=arr[0],即之前在页面B获取到的项目对象
}
catch (e) {
console.error(e)
}
}
}
Nach dem Login kopieren
Führen Sie außerdem die Funktion eval() ein:

Die Funktion eval() kann eine bestimmte Zeichenfolge berechnen und den darin enthaltenen JavaScript-Code ausführen.

Der Rückgabewert ist der Wert, der durch die Berechnung der Zeichenfolge (falls vorhanden) erhalten wird. Zum Beispiel:

//findItem函数如下:
findItem: function(data, key) {
// / <summary>获取对象指定键的值</summary>
if (this.include(data, key)) { //data这里就是传进来的window,注意window就是一个对象,首先判断window对象里是否存在"noticeInfo.setProjectInfo"这个属性
return eval('data.' + key) //如果存在,就执行"data.noticeInfo.setProjectInfo",这样就获取到了这个函数了。(eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码)
}
}
//include函数如下:
include: function(data, key) {
// / <summary>判断对象是否存在键值</summary>
if (data == null || typeof data !== 'object' || !key || typeof key !== 'string') {
return false
}
var keys = key.split('.'),
item = data,
result = true
keys.forEach(function(k) {
if (item != null && typeof item === 'object' && k in item) {
//依次循环遍历,第一次item = data,那就是window这个对象,k="noticeInfo",window[noticeInfo]是存在的,因为在页面A里定义了noticeInfo这么一个对象
//第二次循环,item=window.noticeInfo,k="setProjectInfo",window.noticeInfo[setProjectInfo]也是存在的,因为在页面A里也定义了setProjectInfo这么一个函数
//这里没有第三次循环了,所以最后返回是true,说明window对象里存在"noticeInfo.setProjectInfo"这个属性,接下来使用eval()拿到它即可
item = item[k]
} else {
return result = false
}
})
 
return result
}
Nach dem Login kopieren
Das obige eval('data.' + key) dient also dazu, die Zeichenfolge "data.noticeInfo.setProjectInfo" auszuführen,

Weil sich die Daten hier auf das Fenster beziehen, also es gibt zurück Der Wert ist die Funktion window.noticeInfo.setProjectInfo()

Tatsächlich kann es einfacher sein, eval() zu verwenden, um diese Funktion abzurufen, da das Element in der Include-Funktion enthalten ist bereits window.noticeInfo.setProjectInfo Dieses Objekt ist die Funktion, die wir wollen.

(

In js sind Funktionen auch Objekte. Der Funktionsname ist ein Verweis auf diese Funktion, der fast mit der Adresse identisch ist)

Seitdem haben wir Diese Funktion können wir nicht direkt zurückgeben. Daher können die obigen Methoden include() und findItem wie folgt vereinfacht werden:

eval("x=10;y=20;document.write(x*y)") //输出 200
document.write(eval("2+2")) //输出 4
var x=10
document.write(eval(x+17)) //输出 27
Nach dem Login kopieren
Nach dem Testen wurde festgestellt, dass diese beiden Methoden zum Abrufen von Funktionen darauf basieren Funktionsnamen in Stringform können genau den gleichen Effekt erzielen.

Das obige ist der detaillierte Inhalt vonjs-Funktionsrückruf. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So verwenden Sie JS und Baidu Maps, um die Kartenschwenkfunktion zu implementieren So verwenden Sie JS und Baidu Maps, um die Kartenschwenkfunktion zu implementieren Nov 21, 2023 am 10:00 AM

So implementieren Sie die Kartenschwenkfunktion mit JS und Baidu Map. Baidu Map ist eine weit verbreitete Kartendienstplattform, die häufig zur Anzeige geografischer Informationen, Positionierung und anderer Funktionen in der Webentwicklung verwendet wird. In diesem Artikel wird erläutert, wie Sie mit JS und der Baidu Map API die Kartenschwenkfunktion implementieren, und es werden spezifische Codebeispiele bereitgestellt. 1. Vorbereitung Bevor Sie die Baidu Map API nutzen können, müssen Sie zunächst ein Entwicklerkonto auf der Baidu Map Open Platform (http://lbsyun.baidu.com/) beantragen und eine Anwendung erstellen. Erstellung abgeschlossen

Empfohlen: Ausgezeichnetes JS-Open-Source-Projekt zur Gesichtserkennung und -erkennung Empfohlen: Ausgezeichnetes JS-Open-Source-Projekt zur Gesichtserkennung und -erkennung Apr 03, 2024 am 11:55 AM

Die Technologie zur Gesichtserkennung und -erkennung ist bereits eine relativ ausgereifte und weit verbreitete Technologie. Derzeit ist JS die am weitesten verbreitete Internetanwendungssprache. Die Implementierung der Gesichtserkennung und -erkennung im Web-Frontend hat im Vergleich zur Back-End-Gesichtserkennung Vor- und Nachteile. Zu den Vorteilen gehören die Reduzierung der Netzwerkinteraktion und die Echtzeiterkennung, was die Wartezeit des Benutzers erheblich verkürzt und das Benutzererlebnis verbessert. Die Nachteile sind: Es ist durch die Größe des Modells begrenzt und auch die Genauigkeit ist begrenzt. Wie implementiert man mit js die Gesichtserkennung im Web? Um die Gesichtserkennung im Web zu implementieren, müssen Sie mit verwandten Programmiersprachen und -technologien wie JavaScript, HTML, CSS, WebRTC usw. vertraut sein. Gleichzeitig müssen Sie auch relevante Technologien für Computer Vision und künstliche Intelligenz beherrschen. Dies ist aufgrund des Designs der Webseite erwähnenswert

Wesentliche Tools für die Aktienanalyse: Lernen Sie die Schritte zum Zeichnen von Kerzendiagrammen mit PHP und JS Wesentliche Tools für die Aktienanalyse: Lernen Sie die Schritte zum Zeichnen von Kerzendiagrammen mit PHP und JS Dec 17, 2023 pm 06:55 PM

Wesentliche Tools für die Aktienanalyse: Lernen Sie die Schritte zum Zeichnen von Kerzendiagrammen in PHP und JS. Mit der rasanten Entwicklung des Internets und der Technologie ist der Aktienhandel für viele Anleger zu einer wichtigen Möglichkeit geworden. Die Aktienanalyse ist ein wichtiger Teil der Anlegerentscheidung, und Kerzendiagramme werden häufig in der technischen Analyse verwendet. Wenn Sie lernen, wie man Kerzendiagramme mit PHP und JS zeichnet, erhalten Anleger intuitivere Informationen, die ihnen helfen, bessere Entscheidungen zu treffen. Ein Candlestick-Chart ist ein technischer Chart, der Aktienkurse in Form von Candlesticks anzeigt. Es zeigt den Aktienkurs

So erstellen Sie ein Aktien-Candlestick-Diagramm mit PHP und JS So erstellen Sie ein Aktien-Candlestick-Diagramm mit PHP und JS Dec 17, 2023 am 08:08 AM

So verwenden Sie PHP und JS zum Erstellen eines Aktienkerzendiagramms. Ein Aktienkerzendiagramm ist eine gängige technische Analysegrafik auf dem Aktienmarkt. Es hilft Anlegern, Aktien intuitiver zu verstehen, indem es Daten wie den Eröffnungskurs, den Schlusskurs, den Höchstkurs usw niedrigster Preis der Aktie. In diesem Artikel erfahren Sie anhand spezifischer Codebeispiele, wie Sie Aktienkerzendiagramme mit PHP und JS erstellen. 1. Vorbereitung Bevor wir beginnen, müssen wir die folgende Umgebung vorbereiten: 1. Ein Server, auf dem PHP 2. Ein Browser, der HTML5 und Canvas 3 unterstützt

So verwenden Sie JS und Baidu Maps, um die Karten-Heatmap-Funktion zu implementieren So verwenden Sie JS und Baidu Maps, um die Karten-Heatmap-Funktion zu implementieren Nov 21, 2023 am 09:33 AM

Verwendung von JS und Baidu Maps zur Implementierung der Karten-Heatmap-Funktion Einführung: Mit der rasanten Entwicklung des Internets und mobiler Geräte sind Karten zu einem häufigen Anwendungsszenario geworden. Als visuelle Darstellungsmethode können Heatmaps uns helfen, die Verteilung von Daten intuitiver zu verstehen. In diesem Artikel wird die Verwendung von JS und der Baidu Map API zur Implementierung der Karten-Heatmap-Funktion vorgestellt und spezifische Codebeispiele bereitgestellt. Vorbereitung: Bevor Sie beginnen, müssen Sie Folgendes vorbereiten: ein Baidu-Entwicklerkonto, eine Anwendung erstellen und den entsprechenden AP erhalten

So verwenden Sie JS und Baidu Map, um die Funktion zur Verarbeitung von Kartenklickereignissen zu implementieren So verwenden Sie JS und Baidu Map, um die Funktion zur Verarbeitung von Kartenklickereignissen zu implementieren Nov 21, 2023 am 11:11 AM

Überblick über die Verwendung von JS und Baidu Maps zum Implementieren von Funktionen zur Verarbeitung von Kartenklickereignissen: In der Webentwicklung ist es häufig erforderlich, Kartenfunktionen zum Anzeigen des geografischen Standorts und geografischer Informationen zu verwenden. Die Verarbeitung von Klickereignissen auf der Karte ist ein häufig verwendeter und wichtiger Teil der Kartenfunktion. In diesem Artikel wird erläutert, wie Sie mithilfe von JS und der Baidu-Karten-API die Klickereignisverarbeitungsfunktion der Karte implementieren, und es werden spezifische Codebeispiele angegeben. Schritte: Importieren Sie die API-Datei von Baidu Map. Importieren Sie zunächst die Datei von Baidu Map API in die HTML-Datei.

PHP- und JS-Entwicklungstipps: Beherrschen Sie die Methode zum Zeichnen von Aktienkerzendiagrammen PHP- und JS-Entwicklungstipps: Beherrschen Sie die Methode zum Zeichnen von Aktienkerzendiagrammen Dec 18, 2023 pm 03:39 PM

Mit der rasanten Entwicklung der Internetfinanzierung sind Aktieninvestitionen für immer mehr Menschen zur Wahl geworden. Im Aktienhandel sind Kerzendiagramme eine häufig verwendete Methode der technischen Analyse. Sie können den sich ändernden Trend der Aktienkurse anzeigen und Anlegern helfen, genauere Entscheidungen zu treffen. In diesem Artikel werden die Entwicklungskompetenzen von PHP und JS vorgestellt, der Leser wird zum Verständnis des Zeichnens von Aktienkerzendiagrammen geführt und es werden spezifische Codebeispiele bereitgestellt. 1. Aktien-Kerzendiagramme verstehen Bevor wir uns mit dem Zeichnen von Aktien-Kerzendiagrammen befassen, müssen wir zunächst verstehen, was ein Kerzendiagramm ist. Candlestick-Charts wurden von den Japanern entwickelt

So verwenden Sie JS und Baidu Maps, um die Funktion zum Zeichnen von Kartenpolygonen zu implementieren So verwenden Sie JS und Baidu Maps, um die Funktion zum Zeichnen von Kartenpolygonen zu implementieren Nov 21, 2023 am 10:53 AM

Verwendung von JS und Baidu Maps zur Implementierung der Kartenpolygonzeichnungsfunktion In der modernen Webentwicklung sind Kartenanwendungen zu einer der häufigsten Funktionen geworden. Durch das Zeichnen von Polygonen auf der Karte können wir bestimmte Bereiche markieren, damit Benutzer sie anzeigen und analysieren können. In diesem Artikel wird erläutert, wie Sie mithilfe von JS und der Baidu-Karten-API die Funktion zum Zeichnen von Kartenpolygonen implementieren, und es werden spezifische Codebeispiele bereitgestellt. Zuerst müssen wir die Baidu Map API einführen. Mit dem folgenden Code können Sie das JavaScript der Baidu Map API in eine HTML-Datei importieren

See all articles