• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • Node.js全局對象

    全局對象

    JavaScript 中有一個特殊的對象,稱為全局對象(Global Object),它及其所有屬性都可 以在程序的任何地方訪問,即全局變量。在瀏覽器 JavaScript 中,通常 window 是全局對象, 而 Node.js 中的全局對象是 global,所有全局變量(除了 global 本身以外)都是 global 對象的屬性。

    全局對象與全局變量

    global 最根本的作用是作為全局變量的宿主。按照 ECMAScript 的定義,滿足以下條 件的變量是全局變量:

    • 在最外層定義的變量
    • 全局對象的屬性
    • 隱式定義的變量(未定義直接賦值的變量)。
      當你定義一個全局變量時,這個變量同時也會成為全局對象的屬性,反之亦然。需要注 意的是,在 Node.js 中你不可能在最外層定義變量,因為所有用戶代碼都是屬于當前模塊的, 而模塊本身不是最外層上下文

    process

    process 是一個全局變量,即 global 對象的屬性。它用于描述當前 Node.js 進程狀態的對象,提供了一個與操作系統的簡單接口。通常在你寫本地命令行程序的時候,少不了和它打交道。下面將會介紹 process 對象的一些最常用的成員方法。

    • process.argv是命令行參數數組,第一個元素是 node,第二個元素是腳本文件名, 從第三個元素開始每個元素是一個運行參數。
    console.log(process.argv);

    這里寫圖片描述

    • process.stdout是標準輸出流,通常我們使用的 console.log() 向標準輸出打印 字符,而 process.stdout.write() 函數提供了更底層的接口。
    process.stdout.write("Hello");

    這里寫圖片描述

    • process.stdin是標準輸入流,初始時它是被暫停的,要想從標準輸入讀取數據, 你必須恢復流,并手動編寫流的事件響應函數。
    process.stdin.resume();
    
    process.stdin.on('data',function(data){
        process.stdout.write('read from console: ' + data.toString()); 
    });

    這里寫圖片描述

    • process.nextTick(callback)的功能是為事件循環設置一項任務,Node.js 會在 下次事件循環調響應時調用 callback。
      很多人很可能不理解這個函數的作用,有什么任務不能在當下執行完,需要交給下次事 件循環響應來做呢?我們討論過,Node.js 適合 I/O 密集型的應用,而不是計算密集型的應用, 因為一個 Node.js 進程只有一個線程,因此在任何時刻都只有一個事件在執行。如果這個事 件占用大量的 CPU 時間,執行事件循環中的下一個事件就需要等待很久,因此 Node.js 的一 個編程原則就是盡量縮短每個事件的執行時間。process.nextTick() 提供了一個這樣的 工具,可以把復雜的工作拆散,變成一個個較小的事件。
    function doSomething(args, callback) { 
      somethingComplicated(args);  
       callback(); 
    }  
    doSomething(function onEnd() { 
      compute(); 
    }); 
    
    

    我們假設 compute() 和 somethingComplicated() 是兩個較為耗時的函數,以上 的程序在調用 doSomething() 時會先執行 somethingComplicated(),然后立即調用 回調函數,在 onEnd() 中又會執行 compute()。下面用 process.nextTick() 改寫上 面的程序:

    function doSomething(args, callback) {  
     somethingComplicated(args);  
     process.nextTick(callback);
    }  
    doSomething(function onEnd() {   
        compute(); 
    }); 
    

    改寫后的程序會把上面耗時的操作拆分為兩個事件,減少每個事件的執行時間,提高事 件響應速度。

    注意:不要使用 setTimeout(fn,0)代替 process.nextTick(callback), 前者比后者效率要低得多。

    console

    console 用于提供控制臺標準輸出,它是由 Internet Explorer 的 JScript 引擎提供的調試 工具,后來逐漸成為瀏覽器的事實標準。Node.js 沿用了這個標準,提供與習慣行為一致的 console 對象,用于向標準輸出流(stdout)或標準錯誤流(stderr)輸出字符。

    • console.log():向標準輸出流打印字符并以換行符結束。console.log 接受若干 個參數,如果只有一個參數,則輸出這個參數的字符串形式。如果有多個參數,則 以類似于 C 語言 printf() 命令的格式輸出。第一個參數是一個字符串,如果沒有 參數,只打印一個換行。
    console.log('Hello world');
    console.log('byvoid%diovyb');
    console.log('byvoid%diovyb', 1991); 

    這里寫圖片描述

    • console.error():與 console.log() 用法相同,只是向標準錯誤流輸出。
    • console.trace():向標準錯誤流輸出當前的調用棧。
    console.trace();

    這里寫圖片描述

    版權聲明:本文為cckevincyh原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/cckevincyh/article/details/77652973

    智能推薦

    安裝node.js

      安裝node.js步驟: 步驟1:雙擊下載后的安裝包“node-v0.12.0-x64.msi”,顯示歡迎界面,如下所示:   步驟2:點擊Next、顯示Node.js的許可協議頁面: 步驟3:勾選“I accept the terms in the License Agreement”同意許可協議,并單擊Next下一步,出現...

    node.js

    一. NodeJS  Node.js最大的特性就是異步式I/O與事件緊密結合的編程模式。這種模式與傳統的同步式IO線性的編程思路有很大的不同,因為控制流很大程度上要靠事件和回調函數來組織,一個邏輯要拆分為若干個單元格。  內容:阻塞和線程         1.同步式I/O或阻塞式I/O  ...

    hive 導出數據之一列多行,轉為一行多列

    需求:提取數據 說明:原數據是一列多行,需要轉化為一行多列 待查詢表為:temp_05 待查詢數據為: 待查詢數據如圖: 需要提取的數據表頭如下: 預定日期 昨日價格 前天價格 2018-02-01 2018-02-02 2018-02-03 2018-02-04 可用提數 SQL 數據如圖: 以下為嘗試過程 數據如圖: 數據如圖: 數據如圖: 數據如圖:...

    asp.net做一個簡易的聊天室

    要求: 結果: 關鍵代碼: Default.aspx Default.aspx.cs Default2.aspx Default2.aspx.cs Default3.aspx Default3.aspx.cs Default4.aspx...

    動態SQL和多表關聯-筆記

    《動態SQL與多表關聯》筆記 學習目標 能夠使用動態SQL完成SQL拼接 能夠使用resultMap完成多表查詢 能夠使用一對一查詢 能夠使用一對多查詢 (注:多對多其實就是兩個一個多) 映射文件:為什么要resultMap 目標 定義結果映射 使用結果映射 回顧 在mybatis中有2種配置文件: 核心配置文件,如:sqlMapConfig.xml 實體類映射文件,如:UserMapper.xm...

    猜你喜歡

    【OpenGL C++ UE4】獲取模型頂點及面索引數據,并優化存儲結構供UE4繪制

    目錄 一、功能需求 二、成果 三、環境配置 四、詳細步驟 4.1 Max制作三棱錐并處理 4.2 核心代碼 4.2.1 傳入結構體數據 4.2.2 頂點去重、更新索引 4.2.3 輸出本地CSV文件 4.3 UE4繪制 一、功能需求 想必你肯定會問我一個問題,UE4直接導入模型不好么? 哈哈,前提是在做畢設時,導師提供的只有頂點與面索引數據,沒有模型。 下文詳細介紹了畢設開發中的難點,涉...

    解決Pyinstaller打包numpy和pandas庫文件過大問題

    解決Pyinstaller壓縮numpy和pandas庫文件過大問題 文件包類型和網上的方法 Windows下docker的安裝 在docker下實現打包     今天是2021年的第一天,先祝各位小伙伴現年快樂哈。最近因為做了一個項目,需要打包文件,文件中包含了numpy和pandas庫,結果打包出來幾百行的代碼居然要900m,人都傻了,翻遍了全網找解決方...

    【混沌工程】基于ChaosBlade實現網絡故障模擬

    一、前言 很久之前曾基于linux內核自帶的TC和netem模擬一些公網中遇到的極端情況(延遲、丟包、重復、損壞和亂序等),驗證了我們傳輸程序的健壯性! 具體細節可見這篇老博客: https://blog.csdn.net/u013128262/article/details/84784663 最近在復現kafka生產端一個timeout異常場景時,發現之前方案時因為內核和OS版本問題有些差異而無...

    使用FileZilla連接時超時,無法連接到服務器

    用FileZilla連接服務器時,顯示錯誤: 解決方法: 檢查基本的內容 主機是否寫錯 端口是否自定義,默認21 檢查用戶名和密碼是否錯誤 如果連接的是公司內網 使用ping命令,測試一下是否能收到數據 收不到則需要開啟VPN,再ping,看是否能接收數據(請老鐵們用自己最合適的方法解決) 如果開啟VPN后能接收數據,則可以連接一下服務器,如果不行(怎么可能不行),則跳轉3并依次嘗試 開啟VPN后...

    精品国产乱码久久久久久蜜桃不卡