node

 

 

javascript

1 全局對象

  • global
console.log(global);

// Object [global] {
//     global: [Circular],
//         clearInterval: [Function: clearInterval],
//     clearTimeout: [Function: clearTimeout],
//     setInterval: [Function: setInterval],
//     setTimeout: [Function: setTimeout] { [Symbol(util.promisify.custom)]: [Function] },
//     queueMicrotask: [Function: queueMicrotask],
//     clearImmediate: [Function: clearImmediate],
//     setImmediate: [Function: setImmediate] {
//         [Symbol(util.promisify.custom)]: [Function]
//     }
// }
  • console
console.log(console)

// {
//     log: [Function: bound consoleCall],
//     warn: [Function: bound consoleCall],
//     dir: [Function: bound consoleCall],
//     time: [Function: bound consoleCall],
//     timeEnd: [Function: bound consoleCall],
//     timeLog: [Function: bound consoleCall],
//     trace: [Function: bound consoleCall],
//     assert: [Function: bound consoleCall],
//     clear: [Function: bound consoleCall],
//     count: [Function: bound consoleCall],
//     countReset: [Function: bound consoleCall],
//     group: [Function: bound consoleCall],
//     groupEnd: [Function: bound consoleCall],
//     table: [Function: bound consoleCall],
//     debug: [Function: bound consoleCall],
//     info: [Function: bound consoleCall],
//     dirxml: [Function: bound consoleCall],
//     error: [Function: bound consoleCall],
//     groupCollapsed: [Function: bound consoleCall],
//     Console: [Function: Console],
//     profile: [Function: profile],
//     profileEnd: [Function: profileEnd],
//     timeStamp: [Function: timeStamp],
//     context: [Function: context],
//     [Symbol(kBindStreamsEager)]: [Function: bound ],
//     [Symbol(kBindStreamsLazy)]: [Function: bound ],
//     [Symbol(kBindProperties)]: [Function: bound ],
//     [Symbol(kWriteToConsole)]: [Function: bound ],
//     [Symbol(kGetInspectOptions)]: [Function: bound ],
//     [Symbol(kFormatForStdout)]: [Function: bound ],
//     [Symbol(kFormatForStderr)]: [Function: bound ]
// }

  • exports, require, module, _filename, _dirname(模塊參數)
console.log(arguments.callee + '');

// function (exports, require, module, __filename, __dirname) {
//     console.log(arguments.callee + '');

2 代碼執行優先級

同步代碼優先,例子以下css

// 代碼執行優先級
setTimeout(function () {
    setTimeout(function () {
        console.log('time out');
    }, 0);
    new Promise(resolve => {
        setTimeout(function () {
            console.log('start in Promise');
        }, 1);
        console.log('beg');
        resolve();
        console.log('end');
        setTimeout(function () {
            console.log('end in Promise');
        }, 0);
    }).then(() => {
        console.log('finish');
    });
    console.log('不要調皮');
}, 100);

// beg
// end
// 不要調皮
// finish
// time out
// start in Promise
// end in Promise

3 模塊導入

同步導入,module.exports = exports ==> truehtml

{ test }  » tree                      
.
├── index.js
└── test.js
./index.js
console.log("index.js");
./test.js
require('./index.js');
console.log('test.js');

output: 導入以後纔會繼續執行代碼java

index.js
test.js

4 模塊加載

 

4.1 文件模塊優先級

這裏只考慮 .js .json文件路徑加載node

文件結構
.
├── a.js
├── a.json
├── b.json
└── test.js
a.js
module.exports = "js文件優先";
a.json
{
  "s": "json文件優先"
}
b.json
{
  "main" : "json 文件也支持省略擴展名的方式加載"
}
test.js
// 測試js文件先加載
console.log(require('./a'));
// 證實json也能夠加載
console.log(require('./b'));
output
默認文件加載js先於json文件
js文件優先
{ main: 'json 文件也支持省略擴展名的方式加載' }

4.2 文件夾加載優先級

 

4.2.1 包(文件夾)下的入口文件優先級

 
  1. 文件結構
    .
    ├── a
    │   ├── index.js
    │   ├── m.js
    │   └── package.json
    ├── b
    │   ├── index.js
    │   └── package.json
    ├── c
    │   └── index.js
    └── test.js
    
  2. ./a
    index.js
    module.exports = "index.js文件優先";
    
    m.js
    module.exports = "package.json文件優先";
    
    package.json
    {
      "name": "a",
      "version": "1.0.0",
      "main" : "m.js"
    }
    
  3. ./b
    index.js
    module.exports = "./b/index.js文件優先";
    
    package.json
    {
      "name": "a",
      "version": "1.0.0"
    }
    
  4. ./c
    index.js
    module.exports = "index.js支持默認加載";
    
  5. ./test.js
    // 優先加載packagae.json文件
    console.log(require('./a'));
    // packagae.json中main屬性指定加載某文件
    console.log(require('./b'));
    // index.js也支持默認加載
    console.log(require('./c'));
    
  6. output

    package.json文件中有main優先於index.js文件 python

    package.json文件優先
    ./b/index.js文件優先
    index.js支持默認加載
    

4.2.2 包加載優先級

 
  1. 路徑加載
    文件結構
    .
    ├── fs
    │   └── index.js
    └── test.js
    
    ./fs/index.js
    module.exports = "路徑加載優先級高";
    
    ./fs/test.js
    // 加載核心模塊
    console.log(require('fs'));
    // 第三方模塊
    console.log(require('./fs'));
    
    output

    路徑加載優先級高於核心模塊sql

    {
      appendFile: [Function: appendFile],
      appendFileSync: [Function: appendFileSync],
      access: [Function: access],
      accessSync: [Function: accessSync],
      chown: [Function: chown],
      promises: [Getter]
      ..........//還有不少
    }
    路徑加載優先級高
    
  2. 非路徑加載
    文件結構
    .
    ├── node_modules
    │   ├── fs
    │   │   └── index.js
    │   └── tts
    │       └── index.js
    └── test.js
    
    ./node nodules./fs/index.js
    module.exports = "./node_nodules./fs";
    
    ./node nodules./tts/index.js
    module.exports = "./node_nodules./tts";
    
    ./test.js
    // 判斷第三方模塊和核心模塊的優先級
    console.log(require('fs'));
    // 第三方模塊能夠加載
    console.log(require('tts'));
    
    output
    核心模塊加載優先於第三方模塊(node modules)
    {
      appendFile: [Function: appendFile],
      appendFileSync: [Function: appendFileSync],
      access: [Function: access],
      ......//不少
      promises: [Getter]
    }
    ./node_nodules./tts
    
  3. 第三方模塊查找過程(非路徑查找)
    文件結構
    .
    ├── a
    │   ├── b
    │   │   ├── c
    │   │   │   ├── node_modules
    │   │   │   │   └── tts1
    │   │   │   │       └── index.js
    │   │   │   └── t.js
    │   │   └── node_modules
    │   │       └── tts2
    │   │           └── index.js
    │   └── node_modules
    │       └── tts3
    │           └── index.js
    └── node_modules
        └── tts4
            └── index.js
    
    module.paths 中列表的順序查找
    遞歸向上級目錄查找
    [
      'C:\\a\\b\\c\\node_modules',
      'C:\\a\\b\\node_modules',
      'C:\\a\\node_modules',
      'C:\\node_modules'
    ]
    

5 核心模塊的簡單使用

 

5.1 events

繼承了事件類,自身不用實現事件類shell

const events = require('events');

class Teacher extends events {
    constructor(sec = 2000) {
        super();
        this.sec = sec;
        this.doing();
    }

    doing() {
        let cnt = 0;
        setInterval(() => {
            ++cnt;
            this.emit('class', {cnt});
        }, this.sec);

    }
}

const t = new Teacher();
t.on('class', function (args) {
    console.log('time to class:', args.cnt);
});

Created: 2019-06-26 週三 09:31json

Validatepromise

相關文章
相關標籤/搜索