Node.js入门教程(二十三):全局对象
一、什么是全局对象JavaScript 中有一个特殊的对象称为全局对象Global Object它及其所有属性都可以在程序的任何地方访问即全局变量。在浏览器 JavaScript 中通常window是全局对象而 Node.js 中的全局对象是global所有全局变量除了global本身以外都是global对象的属性。在 Node.js 中我们可以直接访问到global的属性而不需要在应用中包含它。二、全局对象与全局变量global最根本的作用是作为全局变量的宿主。按照 ECMAScript 的定义满足以下条件的变量是全局变量在最外层定义的变量全局对象的属性隐式定义的变量未定义直接赋值的变量当你定义一个全局变量时这个变量同时也会成为全局对象的属性反之亦然。需要注意的是在 Node.js 中你不可能在最外层定义变量因为所有用户代码都是属于当前模块的而模块本身不是最外层上下文。注意最好不要使用var定义变量以避免引入全局变量因为全局变量会污染命名空间提高代码的耦合风险。三、常用全局对象__filename__filename表示当前正在执行的脚本的文件名。它将输出文件所在位置的绝对路径且和命令行参数所指定的文件名不一定相同。如果在模块中返回的值是模块文件的路径。// 输出全局变量 __filename 的值 console.log(__filename);执行main.js文件$ node main.js /web/com/runoob/nodejs/main.js__dirname__dirname表示当前执行脚本所在的目录。// 输出全局变量 __dirname 的值 console.log(__dirname);执行main.js文件$ node main.js /web/com/runoob/nodejs四、定时器函数setTimeout(cb, ms)setTimeout(cb, ms)全局函数在指定的毫秒ms数后执行指定函数cb。setTimeout()只执行一次指定函数返回一个代表定时器的句柄值。function printHello() { console.log(Hello, World!); } // 两秒后执行以上函数 setTimeout(printHello, 2000);执行结果$ node main.js Hello, World!clearTimeout(t)clearTimeout(t)全局函数用于停止一个之前通过setTimeout()创建的定时器。参数t是通过setTimeout()函数创建的定时器。function printHello() { console.log(Hello, World!); } // 两秒后执行以上函数 var t setTimeout(printHello, 2000); // 清除定时器 clearTimeout(t);执行后不会有任何输出因为定时器被清除了。setInterval(cb, ms)setInterval(cb, ms)全局函数在指定的毫秒ms数后执行指定函数cb。返回一个代表定时器的句柄值。可以使用clearInterval(t)函数来清除定时器。setInterval()方法会不停地调用函数直到clearInterval()被调用或窗口被关闭。function printHello() { console.log(Hello, World!); } // 每两秒执行一次以上函数 setInterval(printHello, 2000);执行结果每隔两秒输出一次直到按下Ctrl C$ node main.js Hello, World! Hello, World! Hello, World! ……五、console 对象console用于提供控制台标准输出它是由 Internet Explorer 的 JScript 引擎提供的调试工具后来逐渐成为浏览器的实施标准。Node.js 沿用了这个标准提供与习惯行为一致的console对象用于向标准输出流stdout或标准错误流stderr输出字符。console 方法序号方法 描述1console.log([data][, ...])向标准输出流打印字符并以换行符结束2console.info([data][, ...])返回信息性消息与console.log差别不大3console.error([data][, ...])输出错误消息4console.warn([data][, ...])输出警告消息5console.dir(obj[, options])检查对象并以易于阅读的格式显示6console.time(label)开始计时7console.timeEnd(label)结束计时8console.trace(message[, ...])输出当前执行的代码在堆栈中的调用路径9console.assert(value[, message][, ...])判断表达式是否为真为 false 时输出消息console.log() 示例console.log(Hello world); console.log(byvoid%diovyb); console.log(byvoid%diovyb, 1991);运行结果Hello world byvoid%diovyb byvoid1991iovybconsole.trace() 示例console.trace();运行结果Trace: at Object.anonymous (/home/byvoid/consoletrace.js:1:71) at Module._compile (module.js:441:26) at Object..js (module.js:459:10) at Module.load (module.js:348:31) at Function._load (module.js:308:12) at Array.0 (module.js:479:10) at EventEmitter._tickCallback (node.js:192:40)综合示例console.info(程序开始执行); var counter 10; console.log(计数: %d, counter); console.time(获取数据); // 执行一些代码 console.timeEnd(获取数据); console.info(程序执行完毕。);执行结果$ node main.js 程序开始执行 计数: 10 获取数据: 0ms 程序执行完毕。六、process 对象process是一个全局变量即global对象的属性。它用于描述当前 Node.js 进程状态的对象提供了一个与操作系统的简单接口。process 事件序号事件 描述1exit当进程准备退出时触发2beforeExit当 node 清空事件循环并且没有其他安排时触发3uncaughtException当一个异常冒泡回到事件循环时触发4Signal 事件当进程接收到信号时触发如 SIGINT、SIGUSR1 等process 事件示例process.on(exit, function(code) { // 以下代码永远不会执行因为 exit 事件中无法执行异步操作 setTimeout(function() { console.log(该代码不会执行); }, 0); console.log(退出码为:, code); }); console.log(程序执行结束);执行结果$ node main.js 程序执行结束 退出码为: 0退出状态码状态码名称 描述1Uncaught Fatal Exception- 有未捕获异常2Unused- 保留由 Bash 预留用于内置误用3Internal JavaScript Parse Error- JavaScript 源码解析错误4Internal JavaScript Evaluation Failure- JavaScript 源码评估失败5Fatal Error- V8 里致命的不可恢复的错误6Non-function Internal Exception Handler- 内部异常处理函数为非函数7Internal Exception Handler Run-Time Failure- 异常处理函数自己抛出了异常8Unused- 保留9Invalid Argument- 未知参数或参数没有值10Internal JavaScript Run-Time Failure- JavaScript 源码运行时抛出错误12Invalid Debug Argument- 调试参数设置错误128Signal Exits- 接收到致命信号信号代码 128process 属性序号属性 描述1stdout- 标准输出流2stderr- 标准错误流3stdin- 标准输入流4argv- 命令行参数数组5execPath- Node 二进制文件的绝对路径6execArgv- Node 可执行文件与脚本文件之间的命令行参数7env- 当前 shell 的环境变量对象8exitCode- 进程退出时的代码9version- Node 的版本10versions- 包含 node 版本和依赖的属性11config- 编译当前 node 执行文件的配置选项12pid- 当前进程的进程号13title- 进程名默认值为 node14arch- 当前 CPU 的架构arm、ia32 或 x6415platform- 运行程序所在的平台系统16mainModule-require.main的备选方法process 属性示例// 输出到终端 process.stdout.write(Hello World! \n); // 通过参数读取 process.argv.forEach(function(val, index, array) { console.log(index : val); }); // 获取执行路径 console.log(process.execPath); // 平台信息 console.log(process.platform);执行结果$ node main.js Hello World! 0: node 1: /web/www/node/main.js /usr/local/node/0.10.36/bin/node darwinprocess 方法序号方法 描述1abort()- 触发 abort 事件让 node 退出并生成核心文件2chdir(directory)- 改变当前工作进程的目录3cwd()- 返回当前进程的工作目录4exit([code])- 使用指定的 code 结束进程5getgid()- 获取进程的群组标识POSIX 平台6setgid(id)- 设置进程的群组标识POSIX 平台7getuid()- 获取进程的用户标识POSIX 平台8setuid(id)- 设置进程的用户标识POSIX 平台9getgroups()- 返回进程的群组 ID 数组POSIX 平台10setgroups(groups)- 设置进程的群组 IDPOSIX 平台11kill(pid[, signal])- 发送信号给进程12memoryUsage()- 返回 Node 进程所用的内存状况13nextTick(callback)- 一旦当前事件循环结束调用回调函数14umask([mask])- 设置或读取进程文件的掩码15uptime()- 返回 Node 已经运行的秒数16hrtime()- 返回当前进程的高分辨时间process 方法示例// 输出当前目录 console.log(当前目录: process.cwd()); // 输出当前版本 console.log(当前版本: process.version); // 输出内存使用情况 console.log(process.memoryUsage());执行结果$ node main.js 当前目录: /web/com/runoob/nodejs 当前版本: v0.10.36 { rss: 12541952, heapTotal: 4083456, heapUsed: 2157056 }七、本章小结知识点说明global 对象Node.js 的全局对象所有全局变量的宿主__filename当前执行脚本的绝对路径__dirname当前执行脚本所在目录setTimeout / clearTimeout单次定时器及其清除setInterval / clearInterval重复定时器及其清除console控制台输出对象提供日志、计时、断言等方法process进程对象提供进程控制、环境信息、系统交互等方法提示process对象是 Node.js 中最重要的全局对象之一它提供了与进程和操作系统交互的丰富接口。在编写 CLI 工具、服务监控、进程管理等场景中process对象会被频繁使用。nextTick方法在异步编程中尤其重要它允许你将回调延迟到当前事件循环结束后执行。

相关新闻

Node.js入门教程(二十四):常用工具(util 模块)

Node.js入门教程(二十四):常用工具(util 模块)

一、util 模块概述util 模块是 Node.js 的一个内置模块,包含了实用工具函数,用于支持 JavaScript 编程中的调试、错误处理、格式化等功能。util 提供常用函数的集合,用于弥补核心 JavaScript 的功能过于精简的不足。util 模块中的功能涵盖了从…

2026/10/7 6:30:56 阅读更多 →
零知派ESP32--通过I2C 接口扩展芯片PCF8575使用矩阵键盘控制LED

零知派ESP32--通过I2C 接口扩展芯片PCF8575使用矩阵键盘控制LED

项目概述 本项目以 ESP32 为主控,通过 I2C 接口扩展芯片 PCF8575,将有限的主控引脚扩展为 16 路数字 I/O,并在其上挂载: 模块作用44 矩阵键盘人机输入,控制灯效与工作模式2 路高电平 LED状态指示 / 感应联动照明RGB …

2026/10/12 22:21:49 阅读更多 →
构建Codex Harness:驾驭AI代码生成,实现工程化与自动化测试

构建Codex Harness:驾驭AI代码生成,实现工程化与自动化测试

最近在推进一个大型项目的代码生成与自动化测试框架时,团队反复在代码一致性、测试覆盖率和工程规范落地这几个环节上卡壳。零散的脚本和工具链难以形成闭环,导致开发效率提升有限。本文将围绕“Codex Harness”这一工程化实践的核心概念,系统…

2026/10/9 2:29:43 阅读更多 →

最新新闻

R语言回归实战:首尔自行车需求预测与Cubist模型调优

R语言回归实战:首尔自行车需求预测与Cubist模型调优

简介:这份资源面向具备一定R语言基础、希望上手真实回归建模的数据分析学习者与从业者,围绕首尔自行车共享系统的每小时租赁需求预测展开。数据源自首尔自行车共享计划,核心目标是借助温度、时间、假期、季节等变量,预测每小时所需…

2026/10/13 21:12:02 阅读更多 →
全自动代码演进架构:从AI辅助生成到验证闭环的工程实践

全自动代码演进架构:从AI辅助生成到验证闭环的工程实践

1. 从“帮我写”到“替我做”:AI辅助编程的能级跃迁这两年,我身边的开发团队几乎没有一个不用AI代码助手的。我自己也天天在编辑器里跟它打交道:补全函数、生成单测、写文档注释、改老接口……说实话,效率提升是实打实的&#xff…

2026/10/13 21:12:02 阅读更多 →
电影院会员管理系统开发实战:从需求边界到部署上线的完整复盘

电影院会员管理系统开发实战:从需求边界到部署上线的完整复盘

电影院会员管理系统这种项目,技术栈看起来不算新,但真到动手做的时候,"能跑"和"能交付"之间隔着很远的路。这篇文章我把整个项目的开发过程拆开讲,从需求边界、技术选型,到后端表设计和前端页面实…

2026/10/13 21:12:02 阅读更多 →
国产个人AI助手十天实测:端侧轻量化模型如何实现生活级嵌入

国产个人AI助手十天实测:端侧轻量化模型如何实现生活级嵌入

1. 项目概述:这不是一个“AI工具测评”,而是一次真实生活嵌入实验“我使用国产「个人 AI 助手」的十天|AI 上新”——这个标题里藏着三个关键信号:国产、个人、十天。它不是在比参数,不是在跑分,更不是照着…

2026/10/13 21:12:02 阅读更多 →
Java接口深度解析:从抽象类区别到JVM调用与动态代理设计

Java接口深度解析:从抽象类区别到JVM调用与动态代理设计

不少刚学Java的人第一次看到interface这个关键字,都会下意识把它当成“抽象类的平替”。毕竟两者都能声明抽象方法,都不能直接new,看起来确实像兄弟俩。但等我做项目做到后面才彻底明白,接口在Java里承担的工作,远比“…

2026/10/13 21:12:01 阅读更多 →
基于Django与大数据的药材销售预测及可视化系统全解析

基于Django与大数据的药材销售预测及可视化系统全解析

做中药材销售类项目这么大半年,最常被问的一句话是“这行业的数据分析到底该从哪下手”。说实话,中药材销售和普通快消品差挺远的,品类复杂、产地分散、价格波动受天气和行情影响大,很多团队连一套能用的预测系统都搭不出来。今天…

2026/10/13 21:11:00 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →