转载

再看JS

作为一名JAVA语言的开发者,对静态语言的习以为常后,再去学习动态语言,简直有种野兽出笼的感觉,到处都会产生:还可以这样!!的感叹。对,JS就是一门让我大喊卧槽的语言。

我为什么要学习JS?因为江湖上有个传言–学会了JS,你就是全栈。这样说虽然有点夸大,但是也是有道理的。什么是全栈工程师?

他们能够自己构建和部署一个完整的、可以工作的应用程序,而不需要其他任何人的帮助。

JavaScript是世界上最流行的脚本语言,加上Node.js和react的火热,让JS通吃了web,后端,移动端。也就是说你学会了JS,你就可以独立的完成一个想做的项目,这对一名移动端开发者的吸引力是巨大的,因为他们时常会因为有了一个很好的想法,苦于没有后端服务支撑而烦恼。我对此深有体会,工作之前我是一名不折不扣的个人开发者,因为没有后端支撑,我的dreamlist中很多想法都一直放着,一直至今都苦于自己没有一门称手的后端语言。现在好了,穷人要翻身,让我们看看这门奇妙的语言。

首先让我感觉到不适的是JavaScript的类型是可以改变的,var就是一个世界,他可以是任何类型,而且初始化之后还可以重新赋值为另一种类型。这就是传说中的动态语言,简直就是终结者中的变形人。

然后就是神奇的闭包,高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。看一个来之雪峰总的例子:

实现一个对Array的求和,如果不需要立刻求和,而是在后面的代码中,根据需要再计算怎么办?可以不返回求和的结果,而是返回求和的函数!

functionlazy_sum(arr){  var sum=function(){ returnarr.reduce(function(x, y){ returnx + y;  });  } returnsum; } 

当我们调用lazy_sum()时,返回的并不是求和结果,而是求和函数:

var f = lazy_sum([1,2,3,4,5]);// function sum() 

调用函数f时,才真正计算求和的结果:

f();// 15 

这在JAVA的世界中简直是不可能的,对象就是对象,方法就是方法,每次调用方法必须穿参数,怎么可能出现调用方法然后又返回了一个方法,这种事只能睁大眼睛接受,这就是JS的一大杀器—-闭包,闭包的最大意义就是更强大的抽象能力。

接着有意思的就是JS的各种语法糖,好吃又好玩。比如箭头函数(ES6才支持)

x=> x * x 

其相当于

function(x) { returnx* x; } 

箭头函数相当于匿名函数,并且简化了函数定义。之前看react的时候总是感觉到有点陌生,就是一个很多地方使用了箭头函数,这在普遍使用各种智能IDE的JAVA世界,也有点太随意了。其实不然,Lambda表达式

x->2* x 

呵呵,看来JAVA和JS就像Android和iOS一样,越来越像,这里郑重声明如有雷同纯属巧合。

再看JS的后端实现Node.js,一个叫Ryan Dahl的歪果仁,独自一个人就搞出来了,这段故事非常有趣,想了解详情的看 这里 ,老外也真是各种屌,Brendan Eich这哥们在两周之内设计出了JavaScript语言,Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git。我上学那伙也是1周能把一个奇思妙想实现出来,当初刚学会Android,感觉自己有了很好的方式表达自己的想法,就开始疯狂的创作App,那时候的自己更像一名艺术家。有点跑题。。。

因为Node.js基于JS,所以会了JS再学Node.js非常简单,诺~ 这就是个Node.js程序

'use strict';  console.log('Hello, world.'); 

其他的就是各种模块的方法使用,万变不离其宗,想写出自己的后端程序,还是先学好JS,所有语言都是这样,hello world 简单,goodbye world 难,要想会用JS 100小时足以,但是要想成为JS大神10000小时不够。

对我来说,我需要的是一门表达自己的后端语言和React基础,所以必须要学好JS。

原文  http://xujinyang.github.io/2016/07/24/再看JS/
正文到此结束
Loading...