JS

ES 6

October 8, 2017
Web, JS

历史 # ECMA是个组织,国际标准化组织。 Javascript诞生于1996年,比我略小9个月。由Netscape公司研发,也就是曾经的网景公司。 次年开源交付给ECMA组织进行标准化,力图打造一个国际通用的语言。随后,ECMA发布了国际浏览器脚本语言标准,名称为ECMAScript,实际上就是Javascript的国际标准版。 由于商标等多种原因,名称为ECMAscript,而不是javascript,但我们基本上认为是一个东西。 前者是标准,后者是标准下的实现。 标准是个啥 # 所谓的语言标准,每个语言都有。 在语言不断发展的过程中,会给语言添加一些语法特性,比如以前js是不支持class的,在ES6的标准中就支持啦。 这些标准每年都会变化,不断的有人提案新的语法特性,经由审核实现后发布。 ES6的发布有什么好处? # 让js真正成为一个可以开发大型应用的语言。 不面向对象的程序设计,在开发逻辑复杂的大型企业级应用的时候非常鸡肋,超高的开发周期和人力投入,复杂的耦合关系,而且极难进行维护。 ES6引入了很多的面向对象的语法,以及函数编程的内容,使得js可以hold住大型开发的复杂度。 但是ES6的class在ES5的时候就是可以实现的,只是语法上很别扭,跟传统的面向对象的语法差异很大,让人学起来很懵逼。 语法细节 # 在细节的内容,推荐一个开源的书,所谓开源的书,就是有电子版的网站可以看,印刷版的要买。 详细参考

node nodejs npm 傻傻分不清楚on Ubuntu

August 29, 2017
Node, Npm, JS

在学习angular的过程中,要安装Node,但是我在ubuntu上用一些方法安装的版本都太低了,而且还有node、nodejs这两个东西交替出现,让我很是怀疑人生。 决定扒一扒这鬼玩意儿的前世今生。倒要看看你葫芦里装的是什么逼! ubuntu 下的Node与Nodejs # 首先这两个我认为是一个东西的两个发展阶段,在最开始的时候,名字叫做nodejs,后来升级改版以后就变成了node。 在某个版本之前,我们安装的都是nodejs。命令行中使用的也都是nodejs。后来可能作者们要开始装逼了,于是决定把丑爆了的js去掉,因为js在一些工程师的眼中很垃圾,所以不能让别人认为node也很垃圾。事实上js确实有很多缺陷,但是并不影响它一统前端,甚至进一步掠夺市场进驻后端,甚至现在在无联网领域成为香饽饽。 js在进步,同时node也在进步,喜欢用js这样用起来比较便捷的工程师也越来越多,所以,未来的流行语言里,js应该也有重要的一席之地,所以我要学会它。 js的细节不在这篇文章的讨论范围之内,我还是比较关心这个node到底是个什么神通广大的东西,让这么多程序员都不淡定了。 Node是个啥 # 官方解释:nodejs是一个平台, 它构建在chrome的v8引擎之上,能简易的构建快速,可扩展的网络应用程序… 害怕,口气还真是很大。关键是人家说的是网络应用程序哎!不是前端,也不是server,而是网络应用程序。 其本质就是一个网络应用程序喽,所以必然有两个的东西非常重要,一个是网络,一个是应用程序。 下面分几个小点 V8引擎,名字很帅哈。这个引擎其实就是javascript的解释器,将代码解释成本机可以运行的机器代码。 openssl是个开源的,安全套接层协议。其将数据加密和通信加密算法直接实现在协议中,使得数据离开你的机器时就是加密的,直到目的地才进行解密。是安全通信领域应用最广的一个开源项目。这部分详细的内容会在接下来的文章中详述。Node本身是集成了这个openssl项目的。 事件驱动的非阻塞io模型。 这个是其作为应用程序的一个特征。所谓事件驱动,就是一个异步的处理机制。整个程序通过订阅相应的时间消息,来出发相应的动作。 实现这个功能的主要技术就是libuv, 其前身是linux中的libev。Node重写了这个库并在windows上做了相应的实现,所以node是个可跨平台的运行的程序。 以上就是Node的几个重要的特点,了解了这些特征就能进一步了解其原理。下面在选择一些东西来记录一下。 libuv # nodejs 其实就是 libuv 的一个应用而已。 你自己写程序也可以集成libuv进来, 这样你的c++程序就有了消息循环了. 不再是简单main函数了. 你可以订阅系统的事件, 然后当事件发生时, 系统会调用你的回调函数, 就跟windows上的button click事件一样方便. 而且是跨平台的哦. 是不是很酷. 你几乎可以订阅所有的系统事件, 比如socket事件, 文件读写事件等等. nodejs简单的说只是把javascript解释成c++的回调, 并挂在libuv消息循环上, 等待处理. 这样就实现了非阻塞的异步处理机制(non-blocking I/O model). 那么为什么是javascript而不是其他的语言. 很简单, 因为javascript的闭包. 这非常适合做回调函数. 因为我们一般都希望当回调发生时, 它能记住它原来所在的上下文. 这就是闭包最好的应用场景. 小结 # Node其实就是一个平台,在这个平台上运行的是javascript语言。你可以使用它来实现很多东西,不仅仅是server端的服务程序,也可以写一个窗口的软件程序等等。 Node与python、JVM其实都是一类东西。 ubuntu 安装最新的Node和npm # npm是Node的包管理器。就像是我们的apt对于debian的概念一样。 ubuntu维护的源大多是LTS版本的,但是node的发展速度很快有很多新特性在新的版本中。所以很多时候稳定版本并不能满足我们的需求。下面就介绍一下最新版本的怎么安装。 安装npm # 先用ubuntu库中的资源安装一个低版本 sudo apt install npm 此时我们npm -v发现版本是3. ...