zoukankan      html  css  js  c++  java
  • NodeJs

    一  什么是NodeJs

    Node.js就是运行在服务端的JavaScript。Node.js是一个基于Chrome JavaScript运行时建立的一个平台。Node.js是一个事件驱动I/O服务端JavaScript环境,基于Google的V8引擎,V8引擎执行JavaScript的速度非常快,性能非常好。

    二    创建node.js应用

    第一步:引入required模块

    第二步:创建服务器

    三   NodeJs回调函数

    Node.js异步编程的直接体现就是回调,异步编程依托于回调来实现,但不能说使用了回调程序就异步化了。回调函数在完成任务后就会被调用,Node使用了大量的回调函数,Node所有API都支持回调函数。

    四   事件循环

    Node.js是单进程单线程应用程序,但是通过事件和回调支持并发,性能非常高。

    Node.js的每一个API都是异步的,并作为一个独立线程运行,使用异步函数调用,并处理并发。

    Node.js基本上所有的事件机制都是设计模式中观察者模式实现。

    Node.js单线程类似进入一个while的事件循环,直到没有事件观察者退出,每个异步事件都生成一个事件观察者,如果有事件发生就调用该回调函数。

    五   Node.js  EventEmitter

    EventEmitter提供了多个属性,如on和emit,on函数用于绑定事件函数,emit属性用于触发一个事件。

    比如:

    addListener(event,listener)[为指定事件添加一个监听器到监听器数组的尾部]

    on(event,listener)[为指定事件注册一个监听器,接受一个字符串event和一个回调函数]

    once(event,listener)[为指定事件注册一个单次监听器,即监听器最多只会触发一次,触发后立刻解除该监听器]

    removeListener(event,listener)[移除指定事件的某个监听器,监听器必须是该事件已经注册过的监听器]

    removeAllListener([event])[移除所有事件的所有监听器,如果指定事件,则移除指定事件的所有监听器]

    setMaxListeners(n)[默认情况下,EventEmitters如果你添加的监听器超过10个就会输出警告信息。setMaxListeners函数用于提高监听器的默认限制的数量]

    listeners(event)[返回指定事件的监听器数组]

    emit(event,[arg1],[arg2],[...])[按参数的顺序执行每个监听器,如果事件有注册监听返回true,否则返回false]

    error事件

    EventEmitter定义了一个特殊的事件error,它包含了错误的语义,我们在遇到异常的时候通常会触发error事件。当error被触发时,EventEmitter规定如果没有响应的监听器,Node.js会把它当做异常,退出程序并输出错误信息。我们一般要为触发error事件的对象设置监听器,避免遇到错误后整个程序崩溃。

    六   Node.js模块系统

    模块是Node.js应用程序的基本组成部分,文件和模块是一一对应的。换言之,一个Node.js文件就是一个模块,这个文件可能是JavaScript代码、JSON或者编译过的C/C++扩展。

    Node.js提供了exports和require两个对象,其中exports是模块公开的接口,require用于从外部获取一个模块的接口,即所获取模块的exports对象。

    七   Node.js函数

    在JavaScript中,一个函数可以作为另一个函数接收一个参数。我们可以先定义一个函数,然后传递,也可以在传递参数的地方直接定义函数。

    比如:

    function say(word){

         console.log(word);

    }

    function execute(someFunction,value){

         someFunction(value);

    }

    execute(say,"hello");

    在以上代码中,我们把say函数作为execute函数的第一个变量进行了传递。这里返回的不是say的返回值,而是say本身!这样一来,say就变成了execute中本地变量someFunction,execute可以调用someFunction来使用函数。当然,因为say有一个变量,execute在调用someFunction时可以传递这样一个变量。

    匿名函数

    我们可以把一个函数作为变量传递,但是我们不一定要绕这个“先定义,再传递”的圈子,我们可以直接在另一个函数的括号中定义和传递这个函数。

    function execute(someFunction,value){

         someFunction(value);

    }

    execute(function(word){

       console.log(word)

       },"Hello");

    我们在execute接受第一个参数的地方直接定义了我们准备传递给execute的函数。用这种方式,我们甚至不用给这个函数起名字,这也是为什么它被叫做匿名函数。

  • 相关阅读:
    (Java) LeetCode 44. Wildcard Matching —— 通配符匹配
    (Java) LeetCode 30. Substring with Concatenation of All Words —— 与所有单词相关联的字串
    (Java) LeetCode 515. Find Largest Value in Each Tree Row —— 在每个树行中找最大值
    (Java) LeetCode 433. Minimum Genetic Mutation —— 最小基因变化
    (Java) LeetCode 413. Arithmetic Slices —— 等差数列划分
    (Java) LeetCode 289. Game of Life —— 生命游戏
    (Java) LeetCode 337. House Robber III —— 打家劫舍 III
    (Java) LeetCode 213. House Robber II —— 打家劫舍 II
    (Java) LeetCode 198. House Robber —— 打家劫舍
    (Java) LeetCode 152. Maximum Product Subarray —— 乘积最大子序列
  • 原文地址:https://www.cnblogs.com/watchmen/p/5417688.html
Copyright © 2011-2022 走看看