Javascript

1. 简介及资源

JavaScript是web最流行的脚本语言,广泛用于网页制作。语法基本和C语言基本一致,具有函数式编程和面向对象的思想。ECMAScript是JavaScript的标准。

常用的资源:JavaScript手册JavaScript高级教程

工具:推荐Chrome或Firefox + Firebug。

2. 基础知识

语法、数据类型详见JavaScript高级教程,本wiki不打算重复这些知识。JavasScript允许符号$作为变量名。

声明变量

使用var关键字声明一个变量,如:

var a = 1;

如果是在最外层执行该语句,则a可以当作一个全局变量。如果在函数中或循环等大括符{}中执行该语句,则a当作一个局部变量。

可以发现,不使用var事先声明一个变量也可以使用一个变量:

b = 1;

实际上,这个变量b是作为window对象的属性。也即,b在任何位置都可以被访问到,除非b被作为局部变量而被覆盖掉。

变量作用域

一个简单的规则是,局部变量会覆盖掉全局变量。判断一个变量是否为局部变量,看这个变量是否用var声明了。注意:声明可以在变量使用之后,一个有趣的现象:

a = 1;
function f() {
  alert(a);
  var a = 3;
  alert(a);
};
f();

输出是undefined和3,而不是1和3. 因为根据规则,{}中用var声明了a,所以a在整个{}中都是局部变量,覆盖了全局变量a=1,而在a被赋值为3之前,a是未定义的。

内存和传递参数方式

JavaScript的内存分为基本数据类型和複合(引用)的数据类型。基本数据类型的变量存放于栈中,複合数据类型的变量存放于堆中。栈和堆的内存概念同其它编程语言。基本类型传值,複合类型传引用,这点同Java。

基本数据类型和複合数据类型除了传参表现不同,在对象的表现上也不同:

var a = 1;
a.b = 3; // 无法爲a附加属性
var str = "hello";
str.b = 3; // 注意string类型无法附加属性,也无法通过传参修改,实际上string是不可变複合类型,行爲等同于基本类型

var aa = []; // 複合类型
aa.b = 3; // 可以附加属性,通过alert(aa.b)打印出来
var aaa = function(){} // 複合类型
aaa.b = 3; // 可以附加属性
var aaaa = {}; // 複合类型
aaaa.b = 3; // 可以附加属性

3. Function函数

函数是JavaScript中最常使用的一种对象,概念同C语言等结构式编程中的函数。声明方式常用有两种(还有一种不常用):

function f1(arg1, arg2) {}
var f2 = function(arg1, arg2) {} /*比较推荐*/

JavaScript不是逐行解释执行代码的,而是逐块(

文档更新时间: 2018-11-10 23:05   作者:nick