Node知识点总结

一、闭包

闭包(closure):闭包是一种代码形式,内部函数访问外部函数的局部变量。

在JS中,每当创建一个函数,闭包就会在函数创建的同时被创建出来,作为函数内部与外部连接起来的一座桥梁。

举例:js函数A里面有一个函数B,函数B访问了函数A里面定义的局部变量,此时就产生了闭包。

 变量所在的函数就是闭包函数,这里A就是闭包函数。

        作用1:解决变量污染问题,让变量被函数保护起来。

        作用2:提供了有限的访问权限

        // 外部函数

        function f1(){

            // 外部函数中的变量

            let a = 10;

            // 内部函数

            function f2(){

                // 内部函数访问外部函数的局部变量

                console.log(a);

            }

                // 将内部函数return出去,这样外部才能调用到

            return f2;

        }

        let fn =f1();

        console.log(fn);

        fn();

 

 

二、编写结构化程序

        

模块化概念:  

    把一个大的程序拆分成相互依赖的n个小文件,这些小文件还可以通过特定的语法组合到一起

    优点:  

  •     避免命名冲突(减少命名空间污染)
  •     更好的分离,按需加载  
  •     更高复用性    
  •     高可维护性    

// 在require.js中,使用require.js提供的函数require()来应用一个模块
     require(['模块文件的路径(不带.js后缀)',function(){}
//模块加载成功之后的回调函数
])
 
//    CMD(Common Module Definition):公共模块定义规范。    
// CMD是另一种JS模块化方案,它与AMD很类似。
// 不同点在于:AMD推崇依赖前置、提前执行:CMD推崇依赖就近,延迟执行。
//CMD主要通过sea.js实现此规范。// 目前看到的很少,很少,了解即可。
 
 
// 使用define函数,传入的一般是一个函数,这个函数接受三个参数,分别是require、exports、module。
 define(function(require,exports,module){
const a = require('a')//同步导入
const b = require.async('b',function(b){
console.log(b);
})
//异步导入
})

 三、变量

JS三种作用域

  •        全局作用域(全局变量):在函数外面let的变量
  •        局部作用域(局部变量):在函数里面let变量
  •        块级作用域(块级变量):在分支或循环大括号中let的变量

全局对象:

  (1)global表示Node所在的全局环境,类似于浏览器中的window对象

   (2)process表示当前的进程,它是内置的一个process模块

   (3)console表示标准输入输出,它是内置的一个console模块


全局函数:

   (1)require用于加载模块

   (2)四个和定时器有关的。setTimeout()、clearTimeout()、setInterval()、clearInterval()


 

四、定时器

【setTimeout和setInterval的区别】

 timeout:暂停;超时;

 interval:间隔;间隙。

 使用setTimeout()开启的定时器,“时间”一到代码就会执行, 即用来指定某个函数或某段代码在多少毫秒之后执行。

 使用setInterval()开启的定时器,“时间间隔”一到代码就会执行一次,即每隔一段时间执行一个函数。

 

 setInterval(function(){

            console.log(6);

        },2000)//毫秒

        setTimeout(function(){

            console.log(77);

        },5000)//执行后立刻停止,不再执行

        // 使用clearTimeout()和clearInterval()可以清除定时器。

 

五、promise函数

promise是node.js的对象,它是一个构造函数,作用是将异步操作以同步操作的流程表达出来。解决Node.js异步编程中回调地狱的问题

promise链式写法:

// 导入fs模块 filesystem文件系统模块

const fs = require('fs')

const ps = new Promise((resolve, reject) => {

    fs.readFile("../1.txt", (err, data) => {

        if (!err) {

            resolve(data)

        }

        else {

            reject(err)

        }

    })

})

ps

    // 当代码成功运行,执行.then里的函数

    .then(resolve => {

        console.log('读取到的内容是' + resolve);

        return '你好'

    })

    .then(resolve => {

        console.log('读取到的内容是' + resolve);

        return '不好'

    })

    .then(resolve => {

        console.log('读取到的内容是' + resolve);

    })

    // 当代码运行失败,执行.catch里的函数

    .catch(err => {

        console.log('出错了' + err);

    })

    // .then拿到的参数时上一个 .then中return的内容

    // 如果上一个。then没有retuen 那么下一个 .then中的参数就是underfined

 

六、set方法

set与数组类似,但成员值都是唯一的,没有重复的值,常用语数组查重

 // Set函数可以接收一个数组作为参数,用来初始化

        const s = new Set([12,34,24,24,6])

        console.log(s);

        // 删除后数组s长度

        console.log(s.size);

七、this关键字

  this是一个使用在作用域内部(块级作用域、函数作用域、全局作用域)的关键字。this关键字是函数运行时自动生成的一个内部对象,只能在函数内部使用,总指向调用它的对象。(全局很少使用,大部分在函数内部使用。)

            【this指向】

             根据运行时的不同,this指向的对象有所区别。

             在绝大多数情况下,函数的调用方式决定了this的值。

             浏览器环境/全局环境下使用this:this指向window对象。

 

  // 在函数中使用this:

    // 不管函数怎么定义,不管函数在哪定义,只看函数的调用(箭头函数除外)。

    // 普通函数(直接调用/全局调用):this指向window// 函数名()

        function fn() {

        console.log(this)

        }; //Window}

        fn();

    //普通调用,this指向window

    // 定时器函数:this指向window

    // setTimeout(function(){},0)

    // setInterval(function(){},0)

        setTimeout(fn,0)

    //把fn函数当作定时器处理函数使用

    // 自执行函数:this指向window

    // (function(){})()

    // 以上都是全局函数,this指向window。


版权声明:本文为Jclam原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。