node学习笔记(一)

给node程序传递参数

正常情况下我们通过node xxx.js就可以执行我们执行我们的文件。在某些情况下我们希望给node传递一些参数。我们可以在文件名后面加上需要传递的参数。
node xxx.js age=18 haha

图片

我们可以在程序中通过process这个内置对象获取到传递的参数。
console.log(process);

通过打印process这个内置对象,我们发现它里面包含了很多信息。
其中argv(argument vector)属性是一个数组,包含了我们传递过来的参数。第一个元素是node的安装路径,第二个参数是我们所在文件的路径,第三和第四个参数正是我们传递的参数。

node学习笔记(一)_第1张图片

我们通过argv数组下标来获取传递的参数,还可以遍历这个数组的参数信息。

console.log(process.argv[2]);
console.log(process.argv[3]);

process.argv.forEach(item => {
  console.log(item);
})

node学习笔记(一)_第2张图片

node的输出
console对象是一个全局对象。

console.log: 最常用的输出内容方式
console.clear: 清空控制台
console.trace: 打印函数的调用栈。可以知道某个函数被哪些调用。

console.log(process.argv[2]);
console.log(process.argv[3]);
console.clear()

process.argv.forEach(item => {
  console.log(item);
})

我们可以看到当前控制台打印的是argv数组遍历的结果,前面process.argv[2]和process.argv[3]打印的结果已经被清空了。

node学习笔记(一)_第3张图片

通过console.trace()我们可以打印出函数的调用栈。

function foo() {
  bar()
}

function bar() {
  console.trace();
}

foo()

node学习笔记(一)_第4张图片

全局对象
特殊的全局对象
特殊的全局对象可以在模块中任意使用,但是不能在命令行交互中使用,包括__dirname、__filename、exports、module、require()。

__dirname:获取当前文件所在的路径,是绝对路径,不包括文件名。
__filename:获取当前文件所在路径和文件名。

console.log(__dirname);
console.log(__filename);

图片

常用的全局对象
process对象
process对象提供了node进程中相关的信息,例如node的运行环境、参数信息等。当我们用node运行程序的时候,它会在操作系统里开启一个进程。
console对象
console对象上述已经介绍过。
定时器函数

setTimeout(callback, delay[, ...args]):callback在delay毫秒后执行一次;
setInterval(callback, delay[, ...args]):callback每delay毫秒重复执行一次;
setImmediate(callback[, ...args]):callbackI / O事件后的回调的“立即”执行;
process.nextTick(callback[, ...args]):添加到下一次tick队列中。
setTimeout(() => {
  console.log('setTimeout');
}, 0)

setInterval(() => {
console.log('setInterval');
}, 1000)

setImmediate(() => {
  console.log('setImmediate');
})

process.nextTick(() => {
  console.log('process.nextTick');
})

复制代码

node学习笔记(一)_第5张图片

global对象
global是一个全局对象,前面提到的process、console、setTimeout等都被放到了global全局对象中。
console.log(global);

在控制台输出了global全局对象一部分内容,并不是全部。

node学习笔记(一)_第6张图片

想要看到global全局对象的更多内容,我们可以在终端通过输入node进入交互式环境。然后在交互式环境中输入global.然后按两次tab键,就可以看到global全局对象的更多信息。

node学习笔记(一)_第7张图片

global和window的区别
在浏览器中,全局变量都是在window上的,比如有document、setInterval、setTimeout、alert、console等等。
在node中,global是全局对象。
在浏览器中执行的javascript代码,如果我们在顶级范围内通过var定义的一个属性,默认会被添加到window对象上。因为在浏览器中没有模块的概念,是最顶层的东西。
`var age = 18
console.log(age);`

我们在浏览器中运行,并且在控制台中输入window,我们可以看到window对象中有age属性。

node学习笔记(一)_第8张图片

在node中,我们通过var定义一个变量,它只是在当前模块中有一个变量,不会放在全局中。因为在node中每个文件都是一个独立的模块,定义的变量是在模块里面。如果放在全局,另一个模块中定义相同的变量名会产生冲突。
然后我们在node环境中运行此文件。

var age = 18
console.log(age);

console.log(global.name);

可以看到global对象中没有name属性。

图片

你可能感兴趣的:(前端node.js)