CN112732238A - 一种基于js的执行上下文获取方法及相关装置 - Google Patents

一种基于js的执行上下文获取方法及相关装置 Download PDF

Info

Publication number
CN112732238A
CN112732238A CN202011584600.9A CN202011584600A CN112732238A CN 112732238 A CN112732238 A CN 112732238A CN 202011584600 A CN202011584600 A CN 202011584600A CN 112732238 A CN112732238 A CN 112732238A
Authority
CN
China
Prior art keywords
function
execution context
internal
closure
intercepting
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN202011584600.9A
Other languages
English (en)
Other versions
CN112732238B (zh
Inventor
张勇
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Weimeng Enterprise Development Co ltd
Original Assignee
Shanghai Weimeng Enterprise Development Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shanghai Weimeng Enterprise Development Co ltd filed Critical Shanghai Weimeng Enterprise Development Co ltd
Priority to CN202011584600.9A priority Critical patent/CN112732238B/zh
Publication of CN112732238A publication Critical patent/CN112732238A/zh
Application granted granted Critical
Publication of CN112732238B publication Critical patent/CN112732238B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Devices For Executing Special Programs (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种基于JS的执行上下文获取方法,包括拦截异步代码;在拦截异步代码之后,调用包裹函数,基于包裹函数中的内部变量保存当前的执行上下文,同时返回一内部函数;在调用包裹函数之后,执行异步代码;当触发异步代码的异步事件时,将内部函数压入执行栈,通过内部函数读取内部变量以形成闭包;基于闭包读取保存的执行上下文。通过先拦截异步代码,在执行异步代码之前先通过一包裹函数保存当前的执行上下文,之后再执行异步代码;在触发异步事件时,通过一内部函数读取保存执行上下文的内部变量形成闭包,基于该闭包可以保证读取到正确的上下文。本发明还提供了一种装置、设备及存储介质,同样具有上述有益效果。

Description

一种基于JS的执行上下文获取方法及相关装置
技术领域
本发明涉及web前端技术领域,特别是涉及一种基于JS的执行上下文获取方法、一种基于JS的执行上下文获取装置、一种基于JS的执行上下文获取设备以及一种计算机可读存储介质。
背景技术
随着科技的发展以及社会的进步,计算机以及网络在人们日常生活中的应用越来越广泛。而JS(JavaScript)是一种具有函数优先的轻量级,解释型或即时编译型的高级编程语言,其作为开发Web页面的脚本语言而出名。
而由于JS的引擎是单线程机制,其在执行异步代码时,在当前异步代码的前一部分执行完后,会将执行栈销毁,在执行其他代码。后续当异步事件触发后,在执行异步代码的后一部分时,可能会无法获取到正确的执行上下文。所以如何在执行异步代码时准确的获取到正确的执行上下文是本领域技术人员急需解决的问题。
发明内容
本发明的目的是提供一种基于JS的执行上下文获取方法,可以在执行异步代码时获取到正确的执行上下文;本发明的另一目的在于提供一种基于JS的执行上下文获取装置、一种基于JS的执行上下文获取设备以及一种计算机可读存储介质,可以在执行异步代码时获取到正确的执行上下文。
为解决上述技术问题,本发明提供一种基于JS的执行上下文获取方法,包括:
拦截异步代码;
在拦截所述异步代码之后,调用包裹函数,基于所述包裹函数中的内部变量保存当前的执行上下文,同时返回一内部函数;
在调用所述包裹函数之后,执行所述异步代码;
当触发所述异步代码的异步事件时,将所述内部函数压入执行栈,通过所述内部函数读取所述内部变量以形成闭包;
基于所述闭包读取保存的所述执行上下文。
可选的,所述拦截异步代码包括:
拦截回调函数;
所述在拦截所述异步代码之后,调用包裹函数,基于所述包裹函数中的内部变量保存当前的执行上下文,同时返回一内部函数包括:
在拦截所述回调函数之后,调用包裹函数,基于所述包裹函数中的内部变量保存当前的执行上下文,同时返回一内部函数;
所述在调用所述包裹函数之后,执行所述异步代码包括:
调用所述包裹函数之后,执行所述回调函数。
可选的,所述基于所述闭包读取保存的所述执行上下文包括:
基于词法作用域链读取保存在所述闭包的闭包作用域链中的所述执行上下文。
可选的,所述在拦截所述异步代码之后,调用包裹函数,基于所述包裹函数中的内部变量保存当前的执行上下文,同时返回一内部函数包括;
在拦截所述异步代码之后,调用包裹函数,基于所述包裹函数中的内部变量保存当前的执行上下文的标识信息,同时返回一内部函数;
所述基于所述闭包读取保存的所述执行上下文包括:
基于所述闭包内保存的所述标识信息读取对应的执行上下文。
本发明还提供了一种基于JS的执行上下文获取装置,包括:
拦截模块:用于拦截异步代码;
包裹函数模块:用于在拦截所述异步代码之后,调用包裹函数,基于所述包裹函数中的内部变量保存当前的执行上下文,同时返回一内部函数;
代码执行模块:用于在调用所述包裹函数之后,执行所述异步代码;
闭包模块:用于当触发所述异步代码的异步事件时,将所述内部函数压入执行栈,通过所述内部函数读取所述内部变量以形成闭包;
读取模块:用于基于所述闭包读取保存的所述执行上下文。
可选的,所述拦截模块具体用于:
拦截回调函数;
所述包裹函数模块具体用于:
在拦截所述回调函数之后,调用包裹函数,基于所述包裹函数中的内部变量保存当前的执行上下文,同时返回一内部函数;
所述代码执行模块具体用于:
调用所述包裹函数之后,执行所述回调函数。
可选的,所述读取模块具体用于:
基于词法作用域链读取保存在所述闭包的闭包作用域链中的所述执行上下文。
可选的,所述包裹函数模块具体用于;
在拦截所述异步代码之后,调用包裹函数,基于所述包裹函数中的内部变量保存当前的执行上下文的标识信息,同时返回一内部函数;
所述读取模块具体用于:
基于所述闭包内保存的所述标识信息读取对应的执行上下文。
本发明还提供了一种基于JS的执行上下文获取设备,所述设备包括:
存储器:用于存储计算机程序;
处理器:用于执行所述计算机程序时实现如上述任一项所述基于JS的执行上下文获取方法的步骤。
本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述任一项所述基于JS的执行上下文获取方法的步骤。
本发明所提供的一种基于JS的执行上下文获取方法,包括拦截异步代码;在拦截异步代码之后,调用包裹函数,基于包裹函数中的内部变量保存当前的执行上下文,同时返回一内部函数;在调用包裹函数之后,执行异步代码;当触发异步代码的异步事件时,将内部函数压入执行栈,通过内部函数读取内部变量以形成闭包;基于闭包读取保存的执行上下文。
通过先拦截异步代码,在执行异步代码之前先通过一包裹函数保存当前的执行上下文,之后再执行异步代码;在触发异步事件时,通过一内部函数读取保存执行上下文的内部变量形成闭包,基于该闭包可以保证读取到正确的上下文,从而便于基于JS的异步代码正确的执行。
本发明还提供了一种基于JS的执行上下文获取装置、一种基于JS的执行上下文获取设备以及一种计算机可读存储介质,同样具有上述有益效果,在此不再进行赘述。
附图说明
为了更清楚的说明本发明实施例或现有技术的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例所提供的一种基于JS的执行上下文获取方法的流程图;
图2为本发明实施例所提供的一种具体的基于JS的执行上下文获取方法的流程图;
图3为本发明实施例所提供的一种基于JS的执行上下文获取装置的结构框图;
图4为本发明实施例所提供的一种基于JS的执行上下文获取设备的结构框图。
具体实施方式
本发明的核心是提供一种基于JS的执行上下文获取方法。在现有技术中,由于JS的引擎是单线程机制,其在执行异步代码时,在当前异步代码的前一部分执行完后,会将执行栈销毁,在执行其他代码。后续当异步事件触发后,在执行异步代码的后一部分时,可能会无法获取到正确的执行上下文。
而本发明所提供的一种基于JS的执行上下文获取方法,包括拦截异步代码;在拦截异步代码之后,调用包裹函数,基于包裹函数中的内部变量保存当前的执行上下文,同时返回一内部函数;在调用包裹函数之后,执行异步代码;当触发异步代码的异步事件时,将内部函数压入执行栈,通过内部函数读取内部变量以形成闭包;基于闭包读取保存的执行上下文。
通过先拦截异步代码,在执行异步代码之前先通过一包裹函数保存当前的执行上下文,之后再执行异步代码;在触发异步事件时,通过一内部函数读取保存执行上下文的内部变量形成闭包,基于该闭包可以保证读取到正确的上下文,从而便于基于JS的异步代码正确的执行。
为了使本技术领域的人员更好地理解本发明方案,下面结合附图和具体实施方式对本发明作进一步的详细说明。显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参考图1,图1为本发明实施例所提供的一种基于JS的执行上下文获取方法的流程图。
参见图1,在本发明实施例中,基于JS的执行上下文获取方法包括:
S101:拦截异步代码。
在本步骤中,当需要执行某一异步代码时,需要先暂定执行该异步代码,以执行下述步骤。具体的,在本步骤中通常是对javascript可以产生异步代码的api入口进行接管拦截。
S102:在拦截异步代码之后,调用包裹函数,基于包裹函数中的内部变量保存当前的执行上下文,同时返回一内部函数。
在本步骤之前,通常需要先预先设置一包裹函数wrapperFunc,在该包裹函数中定义有一个内部变量innerKey,该内部变量可以用于保存当前的执行上下文,该执行上下文通常为当前执行同步代码中的执行上下文。
在本步骤中,即在拦截异步代码之后,会调用该包裹函数wrapperFunc,并基于该包裹函数内设置的内部变量innerKey保存当前的执行上下文。之后,包裹函数wrapperFunc会返回一个内部函数innerFunc,在本步骤中通常会将该内部函数传入给javascriptnative异步api,以便在后续步骤中当异步事件触发时,可以调用该内部函数innerFunc。
S103:在调用包裹函数之后,执行异步代码。
在本步骤中,会执行S101拦截的异步代码。
S104:当触发异步代码的异步事件时,将内部函数压入执行栈,通过内部函数读取内部变量以形成闭包。
所谓异步事件即会触发异步代码继续执行的事件,例如达到间隔的预设时间等等。有关异步事件的具体内容可以根据实际情况自行设定,在此不做具体限定。在本步骤中,当触发异步代码的异步事件时,需要首先将S102中返回的内部函数innerFunc压入执行栈,该内部函数具体定义在包裹函数wrapperFunc中,该内部函数具体会读取包裹函数中的内部变量以产生闭包。
S105:基于闭包读取保存的执行上下文。
在本步骤中,具体会基于上述闭包读取内部变量保存的执行上下文,以保证异步代码在执行时具有正确的执行上下文。
具体的,在本步骤中,可以具体基于词法作用域链读取保存在所述闭包的闭包作用域链中的所述执行上下文。有关词法作用域链以及闭包作用域链的具体内容可以参考现有技术,在此不再进行赘述。
本发明实施例所提供的一种基于JS的执行上下文获取方法,包括拦截异步代码;在拦截异步代码之后,调用包裹函数,基于包裹函数中的内部变量保存当前的执行上下文,同时返回一内部函数;在调用包裹函数之后,执行异步代码;当触发异步代码的异步事件时,将内部函数压入执行栈,通过内部函数读取内部变量以形成闭包;基于闭包读取保存的执行上下文。
通过先拦截异步代码,在执行异步代码之前先通过一包裹函数保存当前的执行上下文,之后再执行异步代码;在触发异步事件时,通过一内部函数读取保存执行上下文的内部变量形成闭包,基于该闭包可以保证读取到正确的上下文,从而便于基于JS的异步代码正确的执行。
有关本发明所提供的一种基于JS的执行上下文获取方法的具体内容将在下述发明实施例中做详细介绍。
请参考图2,图2为本发明实施例所提供的一种具体的基于JS的执行上下文获取方法的流程图。
参见图2,在本发明实施例中,基于JS的执行上下文获取方法包括:
S201:拦截回调函数。
在本步骤中,具体会拦截回调函数callBackFunc。由于在现阶段可以产生异步代码的api均有一个共同特点,即均会传入一个回调函数callBackFunc作为实际的异步执行函数。而在本步骤中,具体就会拦截回调函数,以执行下述流程。本步骤的其余内容已在上述发明实施例S101中做详细介绍,在此不再进行赘述。
S202:在拦截回调函数之后,调用包裹函数,基于包裹函数中的内部变量保存当前的执行上下文,同时返回一内部函数。
本步骤具体是在S201中拦截回调函数之后执行,有关包裹函数、内部变量、内部函数等内容已在上述发明实施例中做详细介绍,在此不再进行赘述。
具体的,在本步骤中内部变量可以仅仅保存当前的执行上下文的标识信息,即执行上下文名称contextName。相应的在后续步骤中,可以根据该内部变量保存的执行上下文的标识信息具体找到其对应的执行上下文。即本步骤可以具体为:在拦截所述异步代码之后,调用包裹函数,基于所述包裹函数中的内部变量保存当前的执行上下文的标识信息,同时返回一内部函数。此处异步代码在本发明实施例中通常指回调函数。
S203:调用包裹函数之后,执行回调函数。
在本步骤中,具体会执行S201拦截的回调函数。
S204:当触发异步代码的异步事件时,将内部函数压入执行栈,通过内部函数读取内部变量以形成闭包。
S205:基于闭包读取保存的执行上下文。
上述S204至S205与上述S104至S105基本一致,详细内容请参考上述发明实施例,在此不再进行赘述。
当在上述S202中内部变量具体仅仅保存当前的执行上下文的标识信息,则在本步骤通常具体为:基于所述闭包内保存的所述标识信息读取对应的执行上下文。
需要指出的是,本发明实施例所提供的一种基于JS的执行上下文获取方法具体可以封装至一javascript函数run,即JS中的run函数(contextName,func)中,其中contextName表示执行上下文的名称,即该执行上下文的唯一标识;而func表示要在contextName指定的执行上下文中执行的代码,该代码通常包括有同步代码以及异步代码。
上述run函数的执行步骤通常包括:
S1:将当前执行上下文记录为上一个执行上下文。
S2:基于contextName创建以执行上下文,并将该新创建的执行上下文记录为当前执行上下文currentContext。
S3:执行func。
需要说明的是,在本步骤中,当运行到异步代码时,会执行上述发明实施例所提供的一种基于JS的执行上下文获取方法所对应的各个步骤。其中,内部变量所保存的执行上下文即S2中创建的执行上下文currentContext。
S4:执行func结束后,恢复到上一个执行上下文。
通过上述流程可以实现将同步代码下的当前执行上下文持久到该同步代码产生的异步回调的运行时,从而保证基于JS的异步代码可以正确的执行。
本发明实施例所提供的一种基于JS的执行上下文获取方法,通过先拦截异步代码,在执行异步代码之前先通过一包裹函数保存当前的执行上下文,之后再执行异步代码;在触发异步事件时,通过一内部函数读取保存执行上下文的内部变量形成闭包,基于该闭包可以保证读取到正确的上下文,从而便于基于JS的异步代码正确的执行。
下面对本发明实施例所提供的一种基于JS的执行上下文获取装置进行介绍,下文描述的基于JS的执行上下文获取装置与上文描述的基于JS的执行上下文获取方法可相互对应参照。
请参考图3,图3为本发明实施例所提供的一种基于JS的执行上下文获取装置的结构框图。
参见图3,在本发明实施例中,基于JS的执行上下文获取装置可以包括:
拦截模块100:用于拦截异步代码。
包裹函数模块200:用于在拦截所述异步代码之后,调用包裹函数,基于所述包裹函数中的内部变量保存当前的执行上下文,同时返回一内部函数。
代码执行模块300:用于在调用所述包裹函数之后,执行所述异步代码。
闭包模块400:用于当触发所述异步代码的异步事件时,将所述内部函数压入执行栈,通过所述内部函数读取所述内部变量以形成闭包。
读取模块500:用于基于所述闭包读取保存的所述执行上下文。
作为优选的,在本发明实施例中,所述拦截模块100具体用于:
拦截回调函数;
所述包裹函数模块200具体用于:
在拦截所述回调函数之后,调用包裹函数,基于所述包裹函数中的内部变量保存当前的执行上下文,同时返回一内部函数。
所述代码执行模块300具体用于:
调用所述包裹函数之后,执行所述回调函数。
作为优选的,在本发明实施例中,所述读取模块500具体用于:
基于词法作用域链读取保存在所述闭包的闭包作用域链中的所述执行上下文。
作为优选的,在本发明实施例中,所述包裹函数模块200具体用于;
在拦截所述异步代码之后,调用包裹函数,基于所述包裹函数中的内部变量保存当前的执行上下文的标识信息,同时返回一内部函数。
所述读取模块500具体用于:
基于所述闭包内保存的所述标识信息读取对应的执行上下文。
本实施例的基于JS的执行上下文获取装置用于实现前述的基于JS的执行上下文获取方法,因此基于JS的执行上下文获取装置中的具体实施方式可见前文中基于JS的执行上下文获取方法的实施例部分,例如,拦截模块100,包裹函数模块200,代码执行模块300,闭包模块400,读取模块500分别用于实现上述基于JS的执行上下文获取方法中步骤S101至S105,所以,其具体实施方式可以参照相应的各个部分实施例的描述,在此不再赘述。
下面对本发明实施例提供的一种基于JS的执行上下文获取设备进行介绍,下文描述的基于JS的执行上下文获取设备与上文描述的基于JS的执行上下文获取方法以及基于JS的执行上下文获取装置可相互对应参照。
请参考图4,图4为本发明实施例所提供的一种基于JS的执行上下文获取设备的结构框图。
参照图4,该基于JS的执行上下文获取设备可以包括处理器11和存储器12。
所述存储器12用于存储计算机程序;所述处理器11用于执行所述计算机程序时实现上述发明实施例中所述的基于JS的执行上下文获取方法。
本实施例的基于JS的执行上下文获取设备中处理器11用于安装上述发明实施例中所述的基于JS的执行上下文获取装置,同时处理器11与存储器12相结合可以实现上述任一发明实施例中所述的基于JS的执行上下文获取方法。因此基于JS的执行上下文获取设备中的具体实施方式可见前文中的基于JS的执行上下文获取方法的实施例部分,其具体实施方式可以参照相应的各个部分实施例的描述,在此不再赘述。
本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一发明实施例中所介绍的一种基于JS的执行上下文获取方法。其余内容可以参照现有技术,在此不再进行展开描述。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上对本发明所提供的一种基于JS的执行上下文获取方法、一种基于JS的执行上下文获取装置、一种基于JS的执行上下文获取设备以及一种计算机可读存储介质进行了详细介绍。本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以对本发明进行若干改进和修饰,这些改进和修饰也落入本发明权利要求的保护范围内。

Claims (10)

1.一种基于JS的执行上下文获取方法,其特征在于,包括:
拦截异步代码;
在拦截所述异步代码之后,调用包裹函数,基于所述包裹函数中的内部变量保存当前的执行上下文,同时返回一内部函数;
在调用所述包裹函数之后,执行所述异步代码;
当触发所述异步代码的异步事件时,将所述内部函数压入执行栈,通过所述内部函数读取所述内部变量以形成闭包;
基于所述闭包读取保存的所述执行上下文。
2.根据权利要求1所述的方法,其特征在于,所述拦截异步代码包括:
拦截回调函数;
所述在拦截所述异步代码之后,调用包裹函数,基于所述包裹函数中的内部变量保存当前的执行上下文,同时返回一内部函数包括:
在拦截所述回调函数之后,调用包裹函数,基于所述包裹函数中的内部变量保存当前的执行上下文,同时返回一内部函数;
所述在调用所述包裹函数之后,执行所述异步代码包括:
调用所述包裹函数之后,执行所述回调函数。
3.根据权利要求2所述的方法,其特征在于,所述基于所述闭包读取保存的所述执行上下文包括:
基于词法作用域链读取保存在所述闭包的闭包作用域链中的所述执行上下文。
4.根据权利要求1所述的方法,其特征在于,所述在拦截所述异步代码之后,调用包裹函数,基于所述包裹函数中的内部变量保存当前的执行上下文,同时返回一内部函数包括;
在拦截所述异步代码之后,调用包裹函数,基于所述包裹函数中的内部变量保存当前的执行上下文的标识信息,同时返回一内部函数;
所述基于所述闭包读取保存的所述执行上下文包括:
基于所述闭包内保存的所述标识信息读取对应的执行上下文。
5.一种基于JS的执行上下文获取装置,其特征在于,包括:
拦截模块:用于拦截异步代码;
包裹函数模块:用于在拦截所述异步代码之后,调用包裹函数,基于所述包裹函数中的内部变量保存当前的执行上下文,同时返回一内部函数;
代码执行模块:用于在调用所述包裹函数之后,执行所述异步代码;
闭包模块:用于当触发所述异步代码的异步事件时,将所述内部函数压入执行栈,通过所述内部函数读取所述内部变量以形成闭包;
读取模块:用于基于所述闭包读取保存的所述执行上下文。
6.根据权利要求5所述的装置,其特征在于,所述拦截模块具体用于:
拦截回调函数;
所述包裹函数模块具体用于:
在拦截所述回调函数之后,调用包裹函数,基于所述包裹函数中的内部变量保存当前的执行上下文,同时返回一内部函数;
所述代码执行模块具体用于:
调用所述包裹函数之后,执行所述回调函数。
7.根据权利要求6所述的装置,其特征在于,所述读取模块具体用于:
基于词法作用域链读取保存在所述闭包的闭包作用域链中的所述执行上下文。
8.根据权利要求5所述的装置,其特征在于,所述包裹函数模块具体用于;
在拦截所述异步代码之后,调用包裹函数,基于所述包裹函数中的内部变量保存当前的执行上下文的标识信息,同时返回一内部函数;
所述读取模块具体用于:
基于所述闭包内保存的所述标识信息读取对应的执行上下文。
9.一种基于JS的执行上下文获取设备,其特征在于,所述设备包括:
存储器:用于存储计算机程序;
处理器:用于执行所述计算机程序时实现如权利要求1至4任一项所述基于JS的执行上下文获取方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至4任一项所述基于JS的执行上下文获取方法的步骤。
CN202011584600.9A 2020-12-28 2020-12-28 一种基于js的执行上下文获取方法及相关装置 Active CN112732238B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011584600.9A CN112732238B (zh) 2020-12-28 2020-12-28 一种基于js的执行上下文获取方法及相关装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011584600.9A CN112732238B (zh) 2020-12-28 2020-12-28 一种基于js的执行上下文获取方法及相关装置

Publications (2)

Publication Number Publication Date
CN112732238A true CN112732238A (zh) 2021-04-30
CN112732238B CN112732238B (zh) 2024-02-20

Family

ID=75606800

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011584600.9A Active CN112732238B (zh) 2020-12-28 2020-12-28 一种基于js的执行上下文获取方法及相关装置

Country Status (1)

Country Link
CN (1) CN112732238B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1801096A (zh) * 2005-01-05 2006-07-12 国际商业机器公司 在计算机系统中用于对进程进行休眠的方法和系统
CN1991797A (zh) * 2005-12-30 2007-07-04 英特尔公司 地址空间仿真
US20130283242A1 (en) * 2013-04-20 2013-10-24 Concurix Corporation Tracing Closures in a Callback Environment
CN108399068A (zh) * 2018-03-02 2018-08-14 上海赞控网络科技有限公司 函数程序持久化的方法、电子设备及存储介质
CN109992465A (zh) * 2017-12-29 2019-07-09 中国电信股份有限公司 服务追踪方法、装置和计算机可读存储介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1801096A (zh) * 2005-01-05 2006-07-12 国际商业机器公司 在计算机系统中用于对进程进行休眠的方法和系统
CN1991797A (zh) * 2005-12-30 2007-07-04 英特尔公司 地址空间仿真
US20130283242A1 (en) * 2013-04-20 2013-10-24 Concurix Corporation Tracing Closures in a Callback Environment
CN109992465A (zh) * 2017-12-29 2019-07-09 中国电信股份有限公司 服务追踪方法、装置和计算机可读存储介质
CN108399068A (zh) * 2018-03-02 2018-08-14 上海赞控网络科技有限公司 函数程序持久化的方法、电子设备及存储介质

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
SIMON HOLM JENSEN: "Type Analysis for JavaScript", 《INTERNATIONAL STATIC ANALYSIS SYMPOSIUM》, pages 238 - 255 *
田岭: "基于JavaScript执行效率的几点思考", 《电脑知识与技术》, pages 7872 - 7873 *

Also Published As

Publication number Publication date
CN112732238B (zh) 2024-02-20

Similar Documents

Publication Publication Date Title
CN109597618B (zh) 程序开发方法、装置、计算机设备及存储介质
CN109933350B (zh) 在应用中嵌入代码的方法、装置及电子设备
CN108845841B (zh) 改变终端应用行为的方法、装置及终端
CN111124486A (zh) 发现安卓应用引用第三方工具的方法、系统及存储介质
CN110990001A (zh) Ivr流程执行方法及装置
CN111443902B (zh) 函数调用树生成方法、系统、计算机设备及可读存储介质
CN110968296B (zh) 一种数据获取方法、装置、设备及可读存储介质
CN101566967B (zh) 针对java字节码文件的快速自动修改方法
CN112528619A (zh) 页面模板文件生成方法、装置、电子设备和存储介质
CN114895935A (zh) 刷写车辆ecu的方法、装置、电子设备及存储介质
CN112732238B (zh) 一种基于js的执行上下文获取方法及相关装置
CN110659022B (zh) 一种基于Java自动调用Python脚本的方法
CN111309402B (zh) 数据监测及针对应用程序的处理方法、装置及设备
CN113590179B (zh) 插件检测方法、装置、电子设备及存储介质
CN109408547B (zh) 一种sam注册表的读取方法、读取系统及相关装置
CN114579141A (zh) require框架转化为VUE框架的方法及装置
CN114020278A (zh) 数据处理方法、装置、设备及存储介质
CN112579156A (zh) 一种业务事件的处理系统以及处理方法、装置和设备
CN112800194A (zh) 一种接口变更识别方法、装置、设备及存储介质
CN111796829B (zh) 小程序更新方法、装置、电子设备及计算机可读存储介质
CN112416544B (zh) 一种5g移动终端应用跳转的方法和存储设备
CN117251234B (zh) 基于补丁的函数调用方法及装置
CN115543486B (zh) 面向无服务器计算的冷启动延迟优化方法、装置和设备
CN116466953B (zh) 组件化的前端开发方法、装置、计算机设备和存储介质
CN114371852B (zh) 一种编译方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant