We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
在浏览器 JavaScript 中,通常 window 是全局对象,而在 Node.js 中,全局对象是 global。
window
global
在 Node.js 里,不能在最外层定义一个变量,因为所有的用户代码都是当前模块的,只在当前模块里可用,但可以通过 exports 对象将变量传递给模块外部。
exports
在 Node.js 中,用 var 声明的变量并不属于全局的变量,它们只在当前模块生效。真正的全局变量是挂载在 global 对象上的属性。
var
像上述的 global 全局对象则在全局作用域中,任何全局变量、函数、对象都是该对象的一个属性值。
我们可以将全局对象分为两类:
真正的全局对象
模块级别的全局变量
下面给出一些常见的真正的全局对象:
Buffer 类用于处理二进制数据以及非 Unicode 编码的数据。
Buffer
Unicode
在 Buffer 类的实例化中存储了原始数据。Buffer 类似于一个整数数组,在 V8 堆原始存储空间给它分配了内存。
一旦创建了 Buffer 实例,则无法改变大小。
// 创建一个包含字节 [1, 2, 3] 的 Buffer。 const buf = Buffer.from([1, 2, 3]); // 输出: <Buffer 01 02 03> console.log(buf);
process 对象提供有关当前进程的信息和控制。它是一个全局变量,无需使用 require() 就可以访问它。
process
require()
process 对象包含了许多有用的属性,比如 process.argv,用于获取执行脚本时的命令行参数。
process.argv
启动进程:
node index.js 参数1 参数2 参数3
index.js 文件如下:
process.argv.forEach((val, index) => { console.log(`${index}: ${val}`); });
输出如下:
/usr/local/bin/node /Users/mjr/work/node/process-args.js 参数1 参数2 参数3
除此之外,process 对象还包含其他信息,如版本、操作系统等。
console 对象用于打印到标准输出和标准错误输出。它是 stdout 和 stderr 的简单封装。
console
stdout
stderr
最常用的打印函数:console.log
console.log
console.log("hello");
清空控制台:console.clear
console.clear
打印函数的调用栈:console.trace
console.trace
function test() { demo(); } function demo() { foo(); } function foo() { console.trace(); } test();
setInterval() 方法用于按指定的周期调用函数。clearInterval() 方法用于取消由 setInterval() 方法设置的定时器。
setInterval()
clearInterval()
setInterval(callback, delay[, ...args])
callback 每 delay 毫秒重复执行一次。
callback
delay
// 每 1000 毫秒输出一次 "Hello" const intervalId = setInterval(() => { console.log("Hello"); }, 1000);
clearInterval 用于取消定时器的调用。
clearInterval
clearInterval(intervalId);
setTimeout() 方法用于在指定的毫秒数后调用函数。clearTimeout() 方法用于取消由 setTimeout() 方法设置的定时器。
setTimeout()
clearTimeout()
setTimeout(callback, delay[, ...args])
callback 在 delay 毫秒后执行一次。
// 3000 毫秒后输出 "Hello" const timeoutId = setTimeout(() => { console.log("Hello"); }, 3000);
clearTimeout 用于取消延时器的调用。
clearTimeout
clearTimeout(timeoutId);
全局命名空间对象,前面提到的 process、console、setTimeout 等都是 global 对象的属性。
setTimeout
console.log(process === global.process); // true
这些全局变量是模块中的变量,每个模块都有,看起来像全局变量
。但在命令交互中无法使用。
这些变量包括:
获取当前文件所在的路径,不包括后续的文件名。
console.log(__dirname); // 输出: /Users/mjr
获取当前文件的路径和文件名,包括后续的文件名。
console.log(__filename); // 输出: /Users/mjr/example.js
exports 对象用于指定一个模块所导出的内容,即可以通过 require() 访问的内容。
exports.name = "John Doe"; exports.age = 30; exports.sayHello = function() { console.log("Hello"); };
module 是对当前模块的引用。通过 module.exports 用于指定一个模块所导出的内容,即可以通过 require() 访问的内容。
module
module.exports
require() 函数用于引入模块、 JSON、或本地文件。可以使用相对路径引入本地模块或 JSON 文件,路径会根据 __dirname 定义的目录名或当前工作目录进行处理。
JSON
__dirname
const myModule = require("./myModule");
优点:
缺点:
补充代码示例:
// 例1:演示模块级别的全局变量 __dirname 和 __filename console.log(__dirname); // 输出当前文件所在的路径,如:/Users/mjr console.log(__filename); // 输出当前文件的路径和文件名,如:/Users/mjr/example.js // 例2:演示模块导出和引入 // myModule.js exports.name = "John Doe"; exports.age = 30; exports.sayHello = function() { console.log("Hello"); }; // app.js const myModule = require("./myModule"); console.log(myModule.name); // 输出: John Doe myModule.sayHello(); // 输出: Hello
The text was updated successfully, but these errors were encountered:
No branches or pull requests
面试官:Node.js 中有哪些全局对象?
一、什么是全局对象
在浏览器 JavaScript 中,通常
window
是全局对象,而在 Node.js 中,全局对象是global
。在 Node.js 里,不能在最外层定义一个变量,因为所有的用户代码都是当前模块的,只在当前模块里可用,但可以通过
exports
对象将变量传递给模块外部。在 Node.js 中,用
var
声明的变量并不属于全局的变量,它们只在当前模块生效。真正的全局变量是挂载在global
对象上的属性。像上述的
global
全局对象则在全局作用域中,任何全局变量、函数、对象都是该对象的一个属性值。二、哪些是全局对象
我们可以将全局对象分为两类:
真正的全局对象
模块级别的全局变量
真正的全局对象
下面给出一些常见的真正的全局对象:
Class: Buffer
Buffer
类用于处理二进制数据以及非Unicode
编码的数据。在
Buffer
类的实例化中存储了原始数据。Buffer
类似于一个整数数组,在 V8 堆原始存储空间给它分配了内存。一旦创建了
Buffer
实例,则无法改变大小。process
process
对象提供有关当前进程的信息和控制。它是一个全局变量,无需使用require()
就可以访问它。process
对象包含了许多有用的属性,比如process.argv
,用于获取执行脚本时的命令行参数。启动进程:
index.js 文件如下:
输出如下:
除此之外,
process
对象还包含其他信息,如版本、操作系统等。console
console
对象用于打印到标准输出和标准错误输出。它是stdout
和stderr
的简单封装。最常用的打印函数:
console.log
清空控制台:
console.clear
打印函数的调用栈:
console.trace
clearInterval、setInterval
setInterval()
方法用于按指定的周期调用函数。clearInterval()
方法用于取消由setInterval()
方法设置的定时器。callback
每delay
毫秒重复执行一次。clearInterval
用于取消定时器的调用。clearTimeout、setTimeout
setTimeout()
方法用于在指定的毫秒数后调用函数。clearTimeout()
方法用于取消由setTimeout()
方法设置的定时器。callback
在delay
毫秒后执行一次。clearTimeout
用于取消延时器的调用。global
全局命名空间对象,前面提到的
process
、console
、setTimeout
等都是global
对象的属性。模块级别的全局变量
这些全局变量是模块中的变量,每个模块都有,看起来像全局变量
。但在命令交互中无法使用。
这些变量包括:
__dirname
获取当前文件所在的路径,不包括后续的文件名。
__filename
获取当前文件的路径和文件名,包括后续的文件名。
exports
exports
对象用于指定一个模块所导出的内容,即可以通过require()
访问的内容。module
module
是对当前模块的引用。通过module.exports
用于指定一个模块所导出的内容,即可以通过require()
访问的内容。require
require()
函数用于引入模块、JSON
、或本地文件。可以使用相对路径引入本地模块或JSON
文件,路径会根据__dirname
定义的目录名或当前工作目录进行处理。三、优缺点
优点:
缺点:
补充代码示例:
参考文献
The text was updated successfully, but these errors were encountered: