初探Node.js 笔记(基础)

node官网上的简介

  • Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
  • Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。
  • Node.js 的包管理器 npm,是全球最大的开源库生态系统。

模块化,commonJS

 特点:

        开发初期,需分模块开发,开发效率低。 BUT功能模块一定积累后,开发时降低了程序耦合性,利于后期维护,可复用,降低开发成本

使用:

    通过require()函数引入外部模块,可传递一个文件的路径作为参数,如果使用相对路径必须以 . 或  .. 开头

require()引入模块后,该函数返回一个对象,此对象代表的是引入的模块

var md = require("./demo.js");

    node中一个js文件就是一个模块,一个js文件中的js代码都是独立运行在一个函数中,而不是全局作用域,所以一个模块中的变量和函数在其他模块中无法访问。

通过exports向外部暴露变量和方法,将需要暴露的变量或方法设置为exports的属性即可

 exports.x=a;

模块类别划分:(标识:require()参数

    1、核心模块

                由node引擎提供的模块

                    核心模块的标识就是模块名字

    2、文件模块   

                由用户自己创建的模块

                    文件模块的标识就是文件的路径(绝对,相对)



global 全局变量

全局变量在所有模块中均可使用,类似于浏览器中的window对象

    在浏览器中,顶层作用域就是全局作用域。这意味着在浏览器中,var something 会定义一个新的全局变量。在 Node.js 中则不同,顶层作用域不是全局作用域,var something 的作用域只在模块内

var a = 0;
b = 1
console.log(global.a); // undefined
console.log(global.b); // 1

*****


证明一个js文件中的js代码都是独立运行在一个函数中,而不是全局作用域

方法1、

        利用arguments(伪数组对象):全局中不会有arguments,若存在则可证明


方法2、 利用arguments.callee(该属性保存当前执行的函数对象)

console.log(arguments.callee); // [Function]

由上图可知,node执行模块中代码时实际是将代码放在了一个函数中:

function (exports, require, module, __filename, __dirname) { 

// 执行的代码

}
exports:
        该对象用来将变量或函数暴露到外部
require:
        函数,用来引入外部模块
module:
        代表当前模块本身
        module.exports == exports
_filename:
        当前模块的绝对路径
_dirname:
        当前模块所在文件夹的绝对路径


*****

对象堆栈模型


引用数据类型:function object array



exports和module.exports用法区别

   exports变量是在模块的文件级别作用域内有效的,它在模块被执行前被赋予module.exports的值。

    (exports指向module.exports指向的堆)

            通过exports向外暴露内部变量只能用 .

                    exports .xxx = xxx

            通过module.exports向外暴露内部变量,既可以用 . 也可以用 =

                    module .exports .xxx = xxxx

                    module .exports = { x : "xxx"}

^^; so,为了避免这些麻烦,都用 module.exports 好了!

    结构:

        -package.json        描述文件

        -bin                         可执行二进制文件

        -lib                          js代码

        -doc                        文档

        -test                        测试单元

NPM

    常用命令https://blog.csdn.net/zsy_snake/article/details/80815673

      通过NPM下载的包都放到node_modules文件夹中,直接通过包名引入即可

            node使用模块名引入模块时,会首先在当前目录的node_modules中寻找是否含有该模块,如果有直接使             用,如果没有则去上一级目录中寻找,直到找到或寻找到磁盘根目录路仍没有,报错。

Buffer(缓冲区)

    官网地址http://nodejs.cn/api/buffer.html

    结构和操作方法与数组类似,数组中不能存储二进制文件,而Buffer专门用来存储二进制数据(无需引入模块         直接使用)。

        buffer中的存储都是二进制的形式,但显示时都是以16进制的形式显示,在控制台输出为10进制;每个元素           范围从 00~ff超过后会自动舍位(二进制)



    Buffer的大小一旦确定不可更改,对底层内存的直接操作

    将缓冲区中的数据转化为字符串用toString()

猜你喜欢

转载自blog.csdn.net/zsy_snake/article/details/80807722
今日推荐