<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Node.js 全局對象 JavaScript 中有一個特殊的對象,稱為全局對象(Global Object),它及其所有屬性都可 以在程序的任何地方訪問,即全局變量。 在瀏覽器JavaScript 中,通常window 是全局對象, 而Node.js 中的全局對象是 global,所有全局變量(除了 global 本身以外)都是 global 對象的屬性。 我們在Node.js 中能夠直接訪問到對象通常都是 global 的屬性,如 console、process 等,下面逐一介紹。 ## 全局對象與全局變量 global 最根本的作用是作為全局變量的宿主。按照ECMAScript 的定義,滿足以下條 件的變量是全局變量: * 在最外層定義的變量; * 全局對象的屬性; * 隱式定義的變量(未定義直接賦值的變量)。 當你定義一個全局變量時,這個變量同時也會成為全局對象的屬性,反之亦然。需要注 意的是,在Node.js 中你不可能在最外層定義變量,因為所有用戶代碼都是屬于當前模塊的, 而模塊本身不是最外層上下文。 **注意:** 永遠使用var 定義變量以避免引入全局變量,因為全局變量會污染 命名空間,提高代碼的耦合風險。 ## process process 是一個全局變量,即 global 對象的屬性。 它用于描述當前Node.js 進程狀態 的對象,提供了一個與操作系統的簡單接口。通常在你寫本地命令行程序的時候,少不了要 和它打交道。下面將會介紹process 對象的一些最常用的成員方法。 process.argv是命令行參數數組,第一個元素是 node,第二個元素是腳本文件名, 從第三個元素開始每個元素是一個運行參數。 ``` console.log(process.argv); ``` 將以上代碼存儲為argv.js,通過以下命令運行: ``` $ node argv.js 1991 name=byvoid --v "Carbo Kuo" [ 'node', '/home/byvoid/argv.js', '1991', 'name=byvoid', '--v', 'Carbo Kuo' ] ``` * **process.stdout**是標準輸出流,通常我們使用的 console.log() 向標準輸出打印 字符,而 process.stdout.write() 函數提供了更底層的接口。 * **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() 提供了一個這樣的 工具,可以把復雜的工作拆散,變成一個個較小的事件。 ``` functiondoSomething(args, callback) { somethingComplicated(args); callback(); } doSomething(functiononEnd() { compute(); }); ``` 我們假設compute() 和somethingComplicated() 是兩個較為耗時的函數,以上 的程序在調用 doSomething() 時會先執行somethingComplicated(),然后立即調用 回調函數,在 onEnd() 中又會執行 compute()。下面用process.nextTick() 改寫上 面的程序: ``` functiondoSomething(args, callback) { somethingComplicated(args); process.nextTick(callback); } doSomething(functiononEnd() { compute(); }); ``` 改寫后的程序會把上面耗時的操作拆分為兩個事件,減少每個事件的執行時間,提高事 件響應速度。 **注意:** 不要使用setTimeout(fn,0)代替process.nextTick(callback), 前者比后者效率要低得多。 我們探討了process對象常用的幾個成員,除此之外process還展示了process.platform、 process.pid、process.execPath、process.memoryUsage() 等方法,以及POSIX 進程信號響應機制。有興趣的讀者可以訪問http://nodejs.org/api/process.html 了解詳細 內容。 ## 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); ``` 運行結果為: ``` Hello world byvoid%diovyb byvoid1991iovyb ``` * console.error():與console.log() 用法相同,只是向標準錯誤流輸出。 * console.trace():向標準錯誤流輸出當前的調用棧。 ``` console.trace(); ``` 運行結果為: ``` Trace: at Object.<anonymous> (/home/byvoid/consoletrace.js:1:71) at Module._compile (module.js:441:26) at Object..js (module.js:459:10) at Module.load (module.js:348:31) at Function._load (module.js:308:12) at Array.0 (module.js:479:10) at EventEmitter._tickCallback (node.js:192:40) ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看