缘由
静态网页使用HTML和CSS就够了。动态网站,除了后端要有一种编程语言支持外,前端还需要用到JavaScript。最近几年,JavaScript领域出了很多新技术,如Google的V8、Node.js、CofferScript等等,还有无数的JavaScript框架。
我个人的知识结构中,前端只有接触过HTML和CSS,后端主要是几种脚本语言,加操作系统和数据库相关的那些本职工作,JavaScript基本是一窍不通。对js的无知,导致我闲来想折腾下自己的博客,一涉及到改js相关的代码,就只能搜索一通然后复制粘贴了。
于是决定要花点时间来熟悉下这js这个编程语言。
学习资料
两本书,JvaScript: The Good Parts(Douglas Crockford) 和 Pragmatic Guide to Javascript(主要讲js在浏览器端的常见用途)。
js大牛Douglas Crockford有许多js相关的视频,有时间的时候应该看看。
中文资料有《JavaScript内核》,邱俊涛写的,免费电子书。
主要概念
DOM
DOM(Document Object Model)是浏览器的API。大部分牛人都如说这个API很烂。
js对DOM的主要操作:
- 获取要操作的元素
- 改动元素(显示、隐藏、移动或修改元素内容)
JSON
基本每种编程语言都会提供一个可以存储键值对的数据结构,虽然名字不同,像Perl的Hash
,Python的dict
,Java的Map
。他们也有一个统一的名字,叫做联合数组,Associative array
.
js中的对象使用hash
表示。js中没有类的概念,只有对象。除了少数几个primitives
(布尔值、数字、字符串、几个特殊常数),js中一切都是对象。函数和其他任何对象在地位上没有区别,函数本身也是一个对象。
JSON(JavaScript Object Notation),JavaScript对象表示法,是js中用来表示对象的格式。发明者是Douglas Crockford。这是个好东西。
JSON是用大括号括起来的键值对,也就是Hash
,值可以是任意的JavaScript对象。JSON格式允许递归(它的值又可以是一个JSON表示的任意对象),可以用来表示任意复杂的数据形式。
对象用{}
表示,数组用[]
表示。
两种访问对象属性的方法:
- 点表示法,dot notation,
obj.prop
- 中括号表示法,bracket notation,
obj['prop']
Prototype Chain
通过使用prototype(原型),js建立传统OO语言中的继承,从而体现对象的层次关系。每个对象都有一个prototype属性,prototype本身也是对象,它又有prototype。默认对象的prototype是Object,Object的prototype是空对象null.
函数式编程
闭包(Closure)
函数func内定义函数inner,然后在函数外部调用inner,这个过程就产生一个闭包。
匿名函数(Lambda Expression)
匿名函数就是没有名字的函数。
高阶函数
以一个或多个函数为参数的函数为高阶函数。C语言可以通过函数指针实现高阶函数。
柯里化
预先将函数的某些参数传入,得到一个简单的函数。这个概念还最陌生,没有理解。
Y-Combinator
使用Y结合子,可以做到对匿名函数使用递归。
下一步
- 学习掌握至少一个框架,如jQuery。
- 学学CafferScript。
- 了解了解Node.js。