展开

关键词

首页关键词js 宏定义

js 宏定义

相关内容

  • 广告
    关闭

    618云上GO!

    云服务器1核2G首年95元,新老同享6188元代金券

  • Node.js的底层原理

    首先node.js会调用registerbuiltinmodules函数注册c++模块,这个函数会调用一系列registerxxx的函数,我们发现在node.js源码里找不到这些函数,因为这些函数会在各个c++模块中,通过宏定义实现的。 宏展开后就是一个个如上图黄色框的内容,每个registerxxx函数的作用就是往c++模块的链表了插入一个节点,最后会形成一...
  • JS异步编程

    4、主线程不断重复上面3个步骤,也就是常说的event loop(事件循环)宏任务和微任务除了广义的同步任务和异步任务,任务还有更精细的定义:宏任务(macro...为什么要使用异步由于js是单线程的,只能在js引擎的主线程上运行,所以js代码只能一行一行的执行,如果没有异步的存在,由于当前的任务还没有完成...
  • NodeJS和ReactJS,VUEJS的关系

    reactjs类比java中的:freemarker的宏。 也就是说,你通过写jsx文件,编译后生成一段js文件。 那么好处是什么? 是封装,一大段js定义,最后只需要一句话输出,也就是一行js代码对应右边一个ui组件。 对了reactjs最大的作用就是用来开发ui组件。 记住,facebook出品的reactjs是用来开发ui库的js框架,特点是可以封装...
  • 理解nodejs中js和c++的通信原理

    这就是js调用c++的原理。 2 nodejs是如何处理js调用c++问题的nodejs没有给每个功能定义一个全局变量,而是通过另外一种方式实现js调用c++。 我们以tcp模块为例。 在tcp_wrap.cc文件最后有一句代码node_builtin_module_context_aware(tcp_wrap, nodetcpwrap::initialize) 这是一个宏,展开后如下#define node_builtin...
  • 玩转 Nodejs 命令行

    颜色控制:chalk这个比较简单,写过 c 的同学应该知道控制命令行颜色,只需要 颜色宏定义 + 字体内容 拼接即可。 所以这个库也是,提供更语义化的 api 将...完成过程前面自动换成对号代码仓库地址:play-node-command 。 可以直接 clone 到本地,依次跑一下目录下的 4 个以 play 开头的 js 文件,就能直观看到...
  • JS中的同步异步编程,宏任务与微任务的执行顺序

    首先我们先看看同步与异步的定义,及浏览器的执行机制,方便我们更好地理解同步异步编程。 浏览器是多线程的,js是单线程的(浏览器只分配一个线程来执行js) 进程大线程小:一个进程中包含多个线程,例如在浏览器中打开一个html页面就占用了一个进程,加载页面的时候,浏览器分配一个线程去计算dom树,分配其它的...
  • 深入浅出 Nodejs( 三 ):Nodejs 核心模块机制

    加载.node文件实际上经历了两个步骤,第一个步骤是调用uv_dlopen()方法去打开动态链接库,第二个步骤是调用uv_dlsm()方法找到动态链接库通过node_module宏定义的register_func方法地址。 这两个过程都是通过libuv库进行封装的; 在*nix平台实际上调用的是dlfcn.h头文件定义的dlopen()和dlsym()两个方法; 在windows...
  • 【JS】779- 深入理解Promise

    script.src = src document.head.append(script)}loadscript(.jsscript.js)init()定义在 .jsscript.js 里的函数 但是实际执行后却发现,这样根本不行...所有微任务执行完成,开始执行 settimeout 里的宏任务,打印 p1,至此全部代码执行完成。 promise.allsettled()promise.allsettled(iterable) 当所有的...
  • nodejs之启动源码解析浅析

    environment_strong_persistent_properties(v) #undef v * * 函数宏定义 定义inline void environment::set_ ## propertyname(v8::local value) { ...execute the libinternalbootstrap_node.js file which was included as astatic c string in node_natives.h by node_js2c.internal_bootstrap_node...
  • nodejs之模块系统源码分析(上)

    nodejs的模块分为几种,有内置的c++模块,内置的js模块,还有用户自定义的模块。 下面我们先分析内置模块。 然后在分析用户定义的模块。 1 内置模块首先以注册tcp_wrap.cc模块为例子,一步步分析一下c++模块的注册。 下面是tcp_wrap.cc模块的最后一句代码。 1 node_builtin_module_context_aware(tcp_wrap, node::tcp...
  • nodejs之next_tick源码分析

    const = process._setupnexttick(_tickcallback); 而_setupnexttickl函数是在node.cc定义的一个挂载在process对象上的函数。 env->setmethod(process, _setupnexttick, setupnexttick); 核心代码是env->set_tick_callback_function(args.as()); set_tick_callback_function是在env中用宏定义的一个函数。 他保存了一...
  • 拓展nodejs内核

    我们要做的就是修改这个宏。 因为我们是自定义的内置模块,所以我们可以增加一个宏。 #define node_builtin_extend_modules(v) v(cyb_wrap)然后把这个宏...本文介绍如何通过为nodejs内核增加一个c++模块的方式拓展nodejs的功能(git地址:https:github.comtheanarkhlearn-how-to-extend-node)。 相比修改nodejs...
  • nodejs之setImmediate源码分析

    set_immediate_callback_function函数是在env里用宏定义的,执行的时候对应的函数是env->immediate_callback_function(),该函数在env.cc的checkimmediate中执行,那么checkimmediate又在什么时候被执行呢? 我们接着看。 原来在 environment::start的时候注册了该函数。 uv_check_start(immediate_check_handle()...
  • Js异步机制的实现

    浏览器的event loop是在html5的规范中明确定义,nodejs的event loop是基于libuv实现的。 在浏览器中的event loop由执行栈execution stack、后台线程...当执行栈任务完成后,开始扫面微队列为空,继续扫描宏队列任务,宏队列出队,放入执行栈中执行,执行完毕后继续扫描微队列为空则扫描宏队列,出队执行不断...
  • 编写原生 Node.js 模块

    任何原生node.js模块都需要调用node_module,node_module是一个宏,它会进行模块注册操作。 c++ 有丰富的内置类型来保存数字或者字符串,但是js只能识别v8::里面定义的类型。 因此,将c++的变量赋值给js时,需要转换成可以被js识别的类型,也即是v8::定义的类型。 比如v8::string、v8::object。 编译原生的node.js...
  • 从Javascript到Typescript到Node.js

    要把c++代码和node.js打通,就需要google v8引擎、node.js的*node::objectwrap*包装基类。 所有要导出到javascript的类都需要继承*node::objectwrap*。 所有要导出的c++模块都要实现一个初始化函数,初始化函数的申明式为**void initialize (handle exports); 的形式。 然后要通过node.js的一个宏node_module(, )**来...
  • 理解nodejs插件的加载原理并使用n-api编写你的第一个nodejs插件

    open函数打开了一个动态链接库,这时候我们要先了解一下打开一个动态链接库究竟发生了什么。 首先我们看一个napi动态链接库的定义。 我们回来文章开头的测试代码test.cc。 最后一句是napi_module(node_gyp_module_name, init)这是个宏定义。 #define napi_module(modname, regfunc)napi_module_x(modname, regfunc, ...
  • nodejs的错误处理

    }; uv_errno_map宏展开后如下1. {uv_e2big, e2big, argument list too long}, 2. {uv_eacces, eacces, permission denied}, 3. {uv_eaddrinuse, eaddrinuse, address already in use}, 4. ... 所以导出到js层的结果如下1. { 2. 键是一个数字,由libuv定义,其实是封装了操作系统的定义3. uv_econnrefused: , 4...
  • 通过v8 0.1.5源码分析js的编译、执行过程

    }} this是ia32codegenerator类对象void visit(node* node) { node->accept(this); } 通过层层调用,最后执行node的accept函数。 就是ast树上的每个节点都定义了accept方法来解析自己,生成代码的。 所有节点的accept函数是宏定义实现的。 node_list(v) v(block) v(declaration) ... #define decl_accept(type) void ...
  • 宏任务和微任务的一个小事

    作者:ivan本文根据 javascript 规范入手,阐述了js执行过程在考虑时效性和效率权衡中的演变,并通过从js代码运行的基础机制事件队列入手,分析了js不同任务类型(宏任务、微任务)的差别,通过这些差别给出了详细分析不同任务嵌套的复杂 js 代码执行的分析流程。 一、事件队列与回调在使用javascript编程时,需要...

扫码关注云+社区

领取腾讯云代金券