JavaScript 基本概念

March 13, 2012

缘由

静态网页使用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表示的任意对象),可以用来表示任意复杂的数据形式。

对象用{}表示,数组用[]表示。

两种访问对象属性的方法:

Prototype Chain

通过使用prototype(原型),js建立传统OO语言中的继承,从而体现对象的层次关系。每个对象都有一个prototype属性,prototype本身也是对象,它又有prototype。默认对象的prototype是Object,Object的prototype是空对象null.

函数式编程

#### 闭包(Closure)

函数func内定义函数inner,然后在函数外部调用inner,这个过程就产生一个闭包。

匿名函数(Lambda Expression)

匿名函数就是没有名字的函数。

高阶函数

以一个或多个函数为参数的函数为高阶函数。C语言可以通过函数指针实现高阶函数。

柯里化

预先将函数的某些参数传入,得到一个简单的函数。这个概念还最陌生,没有理解。

Y-Combinator

使用Y结合子,可以做到对匿名函数使用递归。

下一步