javascript教程(3)——JS函数的基础知识

1.函数基础知识

1.1函数的定义

函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。【简而言之,函数是为了实现某种特定功能的代码块】。

 

1.2函数的分类和调用

我们JS里面分为系统函数和自定义函数。所谓的系统函数就是JS为我们已经提供好的函数,而自定义函数就是我们自己写的为了实现某种特定功能的函数。    

系统函数:  

console.log()  // 控制台输出
document.write()   // 页面输出
alert() // 弹框弹出
prompt()  // 弹框输入
confirm()   // 确认弹框
encodeURI()接受一个字符串,将字符串进行UTF-8编码。
encodeURI("中国") ;   // 结果是%E4%B8%AD%E5%9B%BD
decodeURI()//接受一个UTF-8编码后的字符串,把字符串解码成普通的字符串形式。
decodeURI("%E4%B8%AD%E5%9B%BD"); //中国
//等等…………
 

自定义函数:    

在JavaScript中,函数是由关键字function 函数名加一组参数以及置于大括号中需要执行的一段代码定义的。

语法:

//定义方法1【声明方式】:
function 函数名(){
    执行语句;
}
var a = 10;
var b =20;
function add(){
    var c = a + b;
    console.log(c);  // 30
}
add();
//定义方法2【字面量方式】
var 函数名 = function(){ 执行语句 }
var a = 10;
var b =20;
var add = function (){
    var c = a + b;
    console.log(c);  // 30
}
add();
//定义方法3【new 关键字方式】
var 函数名 = new Function(“参数列表”,”函数体”);
var a = 10;
var b =20;
var add = new Function("var c = a + b;console.log(c);" );
add()

我们调用函数是使用函数名加上括号的方式。

函数名()
add();

函数如果不调用基本没有任何意义。就像汽车造出来不开一样,放在那里不用。

 

1.3 函数的参数和返回值

1.3.1参数

在上面的案例我们发现我们只能求出a和b的和不是很方面。这个时候我们可以尝试给函数参数。函数的定义的时候参数不是要求必须给的,但是一旦定义的时候给了,那么在调用的时候也就必须给值。我们把定义的时候给的值称为形参,把调用的时候给的值称为实参。

语法:
function 函数名(形参1,形参2){
    代码块
}
函数名(实参1,实参2)

如:
var a = 10;
var b =20;
function add(x,y){
    var c = x + y;
    console.log(c);  // 30
}
add(10,20);

arguments    注意:如果我们有一个函数的形参的个数是不确定的。也就是说我们实际调用的时候不知道要传入多少实参,这个时候我们可以不用给定形参, 调用的时候直接传入实参。在函数内部我们所有的传入的实参都保存在arguments对象里面。

function add(){
    console.log(arguments);  // 输出 [1, 2, 3, 4]
}
add(1,2,3,4)

简而言之,arguments就是我们的参数对象,它保存着我们所有函数被实际调用的时候传入的参数。有了他我们就不需要考虑实参和形参之间的一一对应的关系。

 

1.3.2 返回值

如果我们想用一个变量承接求和的结果,我们可能需要在全局定义一个变量c来承接。这个时候我们用到了函数的返回值。当我们的函数内部代码遇到return以后会立刻执行跳出函数,不会执行后面的代码。并且将return 后面的内容返回。这个时候我们要注意考虑是否需要用变量承接。

语法:
function 函数名(形参1,形参2){
    代码块
    return;
}
函数名(实参1,实参2)

var a = 10;
var b =20;
function add(x,y){
  return x+y;
}
var res = add(10,20);
console.log(res);  

注意:return的作用主要是用来返回。

 

综合练习

给函数传入两个数求出大的那个数,传入三个数求出最大那个数

 

1.4 函数的作用域和变量提升

1.4.1 作用域

在我们的JS里面分两种作用域,第一个是局部作用域又称函数作用域,第二个是全局作用域。如:

var a = 10;  // 全局的变量
function bbb(){
    var a = 20;
    console.log(a);  // 局部变量a,输出20
}
bbb();
console.log(a); // 全局的a,输出10

1.4.2 变量提升

所谓的变量提升,就是JS在运行的时候会将所有变量的声明放到当前作用域的最前面。如:

console.log(a);// 输出undefined
var a = 10;
console.log(a); // 输出10

这段代码其实整整在运行的时候是下面这样的。

var a;
console.log(a);// 输出undefined
a = 10;
console.log(a); // 输出10

因为a是放到最前面的声明的,所以我们前面输出a的时候输出为没有定义,后面的一句就是给a赋值,所以后面输出有值。    接着我们讨论函数声明提前。

say();
function say(){
    console.log("牵引力教育")  //  输出"牵引力教育"
}

其实我们按照声明方式去定义的函数同样我们在函数之前调用函数也是没问题的。因为我们的JS在运行之前会将所有的变量和定义的函数都放在代码的最前面。

 

1.4.3 作用域链

我们首先看以下代码:

var aa = 10;
function bb(){
    aa++;
    var aa= 21;
    console.log(aa) // 输出21
    function cc(){
        aa += 10;
        console.log(aa); // 输出31
    }
    cc();
    console.log(aa)  // 输出31
}
bb();
console.log(aa);  // 输出10

不知道答案是否和大家心中所想一直。所谓的作用域链就是我们JS的代码在运行的时候讲对应的声明提前都处理好以后,在当前的作用域范围内找不到这个变量的声明就会去往外城作用域找该变量的声明,找到了说明,就是使用这一层的变量。如果一直都向找,都找不到,说明这个变量就是一个全局边的变量。

我们看,我们的函数bb里面虽然 var aa=21 写在a++的后面,但是实际运行时却会在a++;签名加上var aa;将变量声明提前,所以a++其实就是将undefined进行了累加,然后重新又给aa赋值为21。函数cc被调用,这个时候在cc的函数作用域范围内没有声明变量aa,就会去外层找,发现bb所在作用域有,就共用该变量。   而我们全局的aa和里面没有任何关系,所以一直是10。

 

2.递归函数

所谓递归函数就是函数在自身的函数体内调用自身,使用递归函数时一定要当心,处理不当会使程序进入死循环,递归函数只有在特定的情况下使用,如处理阶乘问题。

语法:
var outter=10;
function functionName(parameters1){ 
    functionName(parameters2);
}

会进入死循环的递归函数

firstFun(x){    
    document.write(x+++"<br />")    
    firstFun(x);
}
firstFun(1);

不会进入死循环的递归函数

function fun(num){
    if(num<=1){ 
        return 1;   
    }else{  
        return num*fun(num - 1);    
    }   
}   
console.log(fun(4)) // 结果24

 

3.闭包

3.1闭包是什么?

闭包(Closure)这个词的意思是封闭,将外部作用域中的局部变量封闭起来的函数对象称为闭包。被封闭起来的变量与封闭它的函数对象有相同的生命周期。闭包非常的抽象,理解起来比较困难。  

闭包(closure)是javascript的一大难点,也是它的特色。很多高级应用都要依靠闭包来实现。那么,到底怎么理解闭包呢?  接下来我们来思考一个问题:我们都知道,一个函数内部的变量是局部变量,正常情况下,在函数外部是没办法读取到函数内部的局部变量,但是由于种种原因,有时候我们又需要获取到函数内部的局部变量,这时候我们该怎么做呢?    

如何从外部读取函数内部的局部变量?

function f1(){
 var n=999;
 function f2(){
   alert(n); // 999
 }
    return f2();
}

在上面的代码中,函数f2就被包括在函数f1内部,这时f1内部的所有局部变量,对f2都是可见的。但是反过来就不行,f2内部的局部变量,对f1就是不可见的。

结论:这证明了,函数f1中的局部变量n一直保存在内存中,并没有在f1调用后被自动清除;那为什么会这样呢?原因是f1是f2的父函数,而f2被赋给了一个全局变量,这导致f2始终在内存中,而f2的存在依赖于f1,因此f1也始终在内存中,不会在调用结束后,被垃圾回收机制(garbage collection)回收。    闭包是个有状态(不消失的私有数据)的函数。闭包是个有记忆的函数。闭包相当于一个只有一个方法的紧凑对象。

代码演示数据累加常规写法

var add = function() {
//传统的函数是没有状态的,它们的局部变量都是保存在函数调用栈(Stack)上的,随着函数调用的结束、退出,这些栈上变量的值也会被清空。 
    var v = 1; 
    return v++;
};
console.log(add());
console.log(add());

 

3.2 闭包的写法

//该函数体中的语句将被立即执行
var add = (function() {
    //局部变量
    var v = 1; 
    //返回一个内嵌的闭包函数引用
    return function() {
        //当外部add()函数return后,这里的v不再是外部函数的局部变量v了。
        //v有了记忆
        return v++;
    };
})();
console.log(add()); //1
console.log(add()); //2
console.log(add()); //3
console.log(add()); //4

 

3.3 对象与闭包

函数对象不一定是闭包。Javascript中,每个函数都有一个与之相关联的作用域链。每次调用JavaScript函数的时候,都会为之创建一个新的对象用来保存局部变量,并把这个对象添加至作用域链中。当函数返回时,再将这个对象删除, 此对象会被当做垃圾回收。但如果这个函数定义了嵌套的函数,并将它存储在某处的属性里,就意味着有了一个外部引用指向这个嵌套的函数。它就不会被当作垃圾回收,它所指向的变量绑定对象同样不会被回收。    

由此可见,JavaScript中的函数对象是闭包——可以把外部作用域的局部变量“封闭”起来。    

 

3.4 闭包应用场景

保护函数内的变量安全: 如迭代器、生成器。      

在内存中维持变量: 如果缓存数据。

简化代码: 在一个窗口上有一个按钮控件,当点击按钮时会产生事件,如果我们选择在按钮中处理这个事件,那就必须在按钮控件中保存处理这个事件时需要的各个对象的引用。 另一种选择是把这个事件转发给父窗口,由父窗口来处理这个事件,或是使用监听者模式。无论哪种方式,编写代码都不太方便, 甚至要借助一些工具来帮助生成事件处理的代码框架。用闭包来处理这个问题则比较方便,可以在生成按钮控件的同时就写下事件处理代码。

加强模块化:闭包有益于模块化编程,它能以简单的方式开发较小的模块,从而提高开发速度和程序的可复用性。和没有使用闭包的程序相比,使用闭包可将模块划分得更小。  抽象:闭包是数据和行为的集合,这使得闭包具有较好抽象能力。  保护函数内的变量安全在内存中维持变量  

 

3.5  闭包注意事项

  1. 由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。

  2. 闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(privatevalue),这时一定要小心,不要随便改变父函数内部变量的值。

4.匿名函数

4.1 什么是匿名函数

从简单的字面理解就是一个没有名字的函数。当我们使用函数字面量声明函数时:

var fnName = function(){
    alert(1);
}

把一个函数赋值给变量fnName,而这个函数是没有名字的,即匿名函数。实际上,相当多的语言都有匿名函数。

(function(){})()
//匿名函数
(function(){
    //code,运行的代码
})();

()在JavaScript中有两种含义: 一是运算符;二是分隔符。

上面匿名函数需要说明两点:

1.第一个括号里是一个匿名函数,红色括号代表分割,表示里面的函数是一个部分;

2.最后一个括号表示一个运算符,表示红色括号里面的函数要运行; 相当于定义完一个匿名函数后就让它直接运行。

function show(){
    console.log("show");
}
show();

var show = (function(){}) 
show()

var show2 = (function(){ 
    console.log("show2");
});
show2();

(function(){
    console.log("show3");
})();

4.2 匿名函数的写法

匿名函数在书写之后需要自调用才能执行,不然就相当于写了一段无用代码。匿名函数自调用就是在函数末尾加上左右圆括号 ()。

//常见的匿名函数书写方式
(function(){
    alert("这是一个匿名函数");
})()

(function(){})()

另外的书写方式:

-function(){ 
    console.log(1);
}()
+function(){ 
    console.log(2);
}()
~function(){ 
    console.log(3);
}()

&function(){ 
    console.log(5);
}()

|function(){ 
    console.log(6);
}()
//JQuery 就是使用以下的书写方式
!function(){ 
    console.log(4);
}()

4.3 匿名函数的参数传递

(function(a,b){ 
    alert(a+b);
})(10,20);

 

4.4 匿名的应用

  1. 匿名函数和闭包

  2. 使用匿名函数书写闭包函数

function foo() { 
    var i = 0;
    //返回匿名函数,闭包
    return function(){
        i = i + 1; console.log(i);
    }
}

上面这种方式跟下面这种方式是等价的。

function foo(){ 
    var i = 0; 
    function(){
        return i++;
    }
    return info;
}
//获取闭包函数
var bar = foo();
//调用
bar();//1
bar();//2
bar();//3

使用匿名函数解决命名冲突    团队开发时,经常需要书写多个JS文件,但这些文件需要多个人书写完成。如果没有一定的规范要求,特别容易造成命名冲突,导致部分代码运行错误。  

可以通过匿名函数的方法解决冲突。

//page1.js 
(function(){
    var a = 123;
    var b = "string";
    alert(a);//123
})()

//page2.js 
(function(){
    var a = "abc"; 
    alert(a);//abc
    //因为当前函数中并没有变量b 所以该变量不存在alert(b);
    //b is not defined
})()

两个函数中的变量a是互相不影响。

 

4.5 匿名函数的优缺点

优点  

  1. 减少命名冲突问题安全性    

  2. 将所以变量数据变成局部变量进行操作,可以防止外部人员通过控制台进行数据修改,<span style='color:red'>导致数据出现BUG!严重影响网站的安全<span>。

缺点  

  1. 调试比较麻烦:由于匿名函数没有具体的函数名,但触发错误时,在控制台中。难以寻找到是哪个函数触发的错误。  

  2. 事件绑定上无法移除:使用addEventListener这个方法绑定事件时,使用匿名函数,那这个事件就无法取消。

 

 

PS:纯属本人原创,如有错误 欢迎指点  不才会及时更正  互相学习   

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1章Web GIS基础 1.1GIS及相关技术的发展 1.1.1Web开发技术的发展 1.1.2GIS的发展 1.1.3Web服务的发展 1.1.4Web GIS的发展 1.2OGC的Web服务规范 1.2.1OWS服务体系 1.2.2空间信息Web服务的角色与功能 1.2.3空间信息Web服务的系统框架 1.2.4OWS中的常用服务 1.2.5服务的请求与响应 1.3REST及REST风格的Web服务 1.3.1REST中的基础知识 1.3.2REST风格的Web服务 1.3.3REST风格的Web服务实例 1.4Web GIS的组成 1.5ArcGIS Server REST风格的Web服务 1.5.1ArcGIS S erver站点的架构 1.5.2ArcGIS Server发布的服务类型 1.5.3服务发布 1.5.4Web服务的URL及元数据 1.5.5查看地图 1.5.6使用ArcGIS Server REST风格Web服务的过程 1.5.7支持的输出格式 第2章ArcGIS API for JavaScript基础 2.1ArcGIS API for JavaScript版的Hello World 2.2ArcGIS API for JavaScript与Dojo 2.2.1ArcGIS API for JavaScript的构成 2.2.2ArcGIS API for JavaScript与Dojo的关系 2.3开发与调试工具 2.3.1集成开发环境 2.3.2调试工具 2.3.3Firebug 2.3.4其他工具软件 2.4Dojo基础知识 2.4.1JavaScript对象 2.4.2函数也是对象 2.4.3模拟类与继承 2.4.4使用模块与包管理源代码 第3章页面布局设计 3.1使用布局小部件设计页面框架 3.1.1小部件与布局小部件简介 3.1.2使用面板组织页面元素 3.1.3使用容器小部件设计页面布局 3.2可移动的小部件微架构 3.2.1自定义小部件的基础知识 3.2.2内容小部件的基类实现 3.2.3可移动的框架小部件 3.2.4测试 3.3集中控制的小部件微架构 3.3.1可集中控制的框架小部件 3.3.2小部件容器 3.3.3测试 3.3.4订阅/发布模式的事件处理机制 3.4使用菜单组织功能 3.4.1菜单容器小部件 3.4.2菜单项小部件 3.4.3菜单小部件 3.4.4测试 第4章地图与图层 4.1图层操作 4.1.1图层类及其之间的继承关系 4.1.2切片地图图层 4.1.3动态地图图层 4.1.4图形图层 4.1.5带地理参考的影像图层 4.1.6 KML图层 4.2自定义图层 4.2.1自定义动态图层——热度图图层 4.2.2自定义切片地图图层——百度地图 4.2.3自定义图层——三维建筑图 4.3地图操作 4.3.1地图窗口操作 4.3.2地图属性获取 4.3.3事件处理 4.4地图参数的基本配置 4.4.1漫游与缩放动画的参数配置 4.4.2比例滚动条的参数配置 4.4.3跨域访问参数配置 4.5图层控制器 4.5.1图层控制器小部件模板 4.5.2图层控制器小部件类 4.5.3图层控制器小部件的使用 第5章空间参考系统与几何对象 5.1空间参考系统 5.1.1空间参考系统类 5.1.2参考系统转换 5.2几何对象 5.2.1几何对象类及其之间的继承关系 5.2.2几何对象的绘制 5.2.3几何对象相关的功能模块 第6章符号与图形 6.1符号 6.1.1标记符号 6.1.2线符号 6.1.3填充符号 6.1.4文本符号 6.2图形 6.2.1图形对象的构成
第 1 章 JavaScript 是什么...............................................1 3 1.1 历史简述..............................................1 1.2 JavaScript 实现..............................................2 1.2.1 ECMAScript 1.2.2 DOM..............................................5 1.2.3 BOM..............................................8 1.3 小结..............................................8 第 2 章 ECMAScript 基础...............................................9 2.1 语法..............................................9 2.2 变量..............................................10 2.3 关键字..............................................12 2.4 保留字..............................................12 2.5 原始值和引用值..............................................13 2.6 原始类型..............................................13 2.6.1 typeof 运算符..............................................14 2.6.2 Undefined 类型..............................................14 2.6.3 Null 类型..............................................15 2.6.4 Boolean 类型..............................................15 2.6.5 Number 类型..............................................15 2.6.6 String 类型..............................................17 2.7 转换..............................................18 2.7.1 转换成字符串..............................................18 2.7.2 转换成数字..............................................19 2.7.3 强制类型转换..............................................20 2.8 引用类型..............................................22 2.8.1 Object 类..............................................22 2.8.2 Boolean 类..............................................23 2.8.3 Number 类..............................................23 2.8.4 String 类..............................................24 2.8.5 instanceof 运算符..............................................28 2.9 运算符..............................................28 2.9.1 一元运算符..............................................28 2.9.2 位运算符..............................................32 2.9.3 Boolean 运算符..............................................37 2.9.4 乘性运算符..............................................40 2.9.5 加性运算符..............................................41 2.9.6 关系运算符..............................................42 2.9.7 等性运算符..............................................43 2.9.8 条件运算符..............................................45 2.9.9 赋值运算符..............................................45 2.9.10 逗号运算符..............................................46 2.10 语句..............................................46 2.10.1 if 语句..............................................46 2.10.2 迭代语句..............................................47 2.10.3 有标签的语句..............................................48 2.10.4 break 语句和 continue 语句..............................................48 2.10.5 with 语句..............................................50 2.10.6 switch 语句..............................................50 2.11 函数..............................................51 2.11.1 无重载..............................................53 2.11.2 arguments 对象..............................................53 2.11.3 Function 类..............................................54 2.11.4 闭包..............................................56 2.12 小结..............................................57 第 3 章 对象基础...............................................58 3.1 面向对象术语..............................................58 3.1.1 面向对象语言的要求..............................................58 3.1.2 对象的构成..............................................59 3.2 对象应用..............................................59 3.2.1 声明和实例化..............................................59 3.2.2 对象引用..............................................59 3.2.3 对象废除..............................................59 3.2.4 早绑定和晚绑定..............................................60 3.3 对象的类型..............................................60 3.3.1 本地对象..............................................60 3.3.2 内置对象..............................................70 3.3.3 宿主对象..............................................75 3.4 作用域..............................................75 3.4.1 公用、受保护和私有作用域..............................................75 3.4.2 静态作用域并非静态的..............................................76 3.4.3 关键字 this. 76 3.5 定义类或对象..............................................78 3.5.1 工厂方式..............................................78 3.5.2 构造函数方式..............................................80 3.5.3 原型方式..............................................80 3.5.4 混合的构造函数/原型方式..............................................81 3.5.5 动态原型方法..............................................82 3.5.6 混合工厂方式..............................................83 3.5.7 采用哪种方式..............................................84 3.5.8 实例..............................................84 3.6 修改对象..............................................86 3.6.1 创建新方法..............................................86 3.6.2 重定义已有方法..............................................87 3.6.3 极晚绑定..............................................88 3.7 小结..............................................88 第 4 章 继承. 104...............................................89 100 4.1 继承机制实例..............................................89 4.2 继承机制的实现..............................................90 4.2.1 继承的方式..............................................90 4.2.2 一个更实际的例子..............................................96 4.3 其他继承方式..............................................100 4.3.1 zInherit 4.3.2 xbObjects 4.4 小结..............................................108 第 5 章 浏览器中的 JavaScript 109 5.1 HTML 中的 JavaScript 109 5.1.1 <script/>标签..............................................109 5.1.2 外部文件格式..............................................110 5.1.3 内嵌代码和外部文件..............................................111 5.1.4 标签放置..............................................111 5.1.5 隐藏还是不隐藏..............................................113 5.1.6 <noscript/>标签..............................................113 5.1.7 XHTML 中的改变..............................................114 5.2 SVG 中的 JavaScript 116 5.2.1 SVG 基础..............................................116 5.2.2 SVG 中的<script/>标签..............................................117 5.2.3 SVG 中的标签放置..............................................118 5.3 BOM..............................................119 5.3.1 window 对象..............................................119 5.3.2 document 对象..............................................130 5.3.3 location 对象..............................................133 5.3.4 navigator 对象..............................................135 5.3.5 screen 对象..............................................136 5.4 小结..............................................137 第 6 章 DOM 基础...............................................138 6.1 什么是 DOM?..............................................138 6.1.1 XML 简介..............................................138 6.1.2 针对 XML 的 API 141 6.1.3 节点的层次..............................................141 6.1.4 特定语言的 DOM..............................................144 6.2 对 DOM 的支持..............................................145 6.3 使用 DOM..............................................145 6.3.1 访问相关的节点..............................................145 6.3.2 检测节点类型..............................................146 6.3.3 处理特性..............................................147 6.3.4 访问指定节点..............................................148 6.3.5 创建和操作节点..............................................150 6.4 HTML DOM 特征功能..............................................155 6.4.1 让特性像属性一样..............................................155 6.4.2 table 方法..............................................156 6.5 遍历 DOM..............................................158 6.5.1 NodeIterator. 158 6.5.2 TreeWalker. 163 6.6 测试与 DOM 标准的一致性..............................................165 6.7 DOM Level 3. 166 6.8 小结..............................................166 第 7 章 正则表达式...............................................167 7.1 正则表达式支持..............................................167 7.1.1 使用 RegExp 对象..............................................168 7.1.2 扩展的字符串方法..............................................169 7.2 简单模式..............................................170 7.2.1 元字符..............................................170 7.2.2 使用特殊字符..............................................170 7.2.3 字符类..............................................172 7.2.4 量词..............................................174 7.3 复杂模式..............................................177 7.3.1 分组..............................................177 7.3.2 反向引用..............................................178 7.3.3 候选..............................................179 7.3.4 非捕获性分组..............................................180 7.3.5 前瞻..............................................181 7.3.6 边界..............................................182 7.3.7 多行模式..............................................183 7.4 理解 RegExp 对象..............................................184 7.4.1 实例属性..............................................184 7.4.2 静态属性..............................................185 7.5 常用模式..............................................186 7.5.1 验证日期..............................................187 7.5.2 验证信用卡号..............................................188 7.5.3 验证电子邮件地址..............................................192 7.6 小结..............................................193 第 8 章 检测浏览器和操作系统 201...............................................194. 200 8.1 navigator 对象..............................................194. 198 8.2 检测浏览器的方式..............................................194 8.2.1 对象/特征检测法..............................................194 8.2.2 user-agent 字符串检测法..............................................195 8.3 user-agent 字符串简史..............................................196 8.3.1 Netscape Navigator 3.0 与 IE3.0. 196 8.3.2 Netscape Communicator 4.0 与 IE 4.0. 197 8.3.3 IE 5.0 及更高版本..............................................198 8.3.4 Mozilla 8.3.5 Opera 8.3.6 Safari 8.3.7 结语..............................................201 8.4 浏览器检测脚本..............................................201 8.4.1 方法学..............................................202 8.4.2 第一步..............................................202 8.4.3 检测 Opera................................................ 204 8.4.4 检测 Konqueror/Safari ...............................................206 8.4.5 检测 IE................................................ 208 8.4.6 检测 Mozilla. ...............................................209 8.5 平台/操作系统检测脚本..............................................211 8.5.1 方法学..............................................211 8.5.2 第一步..............................................212 8.5.3 检测 Windows 操作系统..............................................212 8.5.4 检测 Macintosh 操作系统..............................................214 8.5.5 检测 Unix 操作系统..............................................214 8.6 全部脚本..............................................215 8.7 例子:登录页面..............................................219 8.8 小结..............................................224 第 9 章 事件...............................................225 9.1 今天的事件..............................................225 9.2 事件流..............................................226 9.2.1 冒泡型事件..............................................226 9.2.2 捕获型事件..............................................227 9.2.3 DOM 事件流..............................................228 9.3 事件处理函数/监听函数..............................................22 9................................................ 230 9.3.1 IE 9.3.2 DOM..............................................231 9.4 事件对象..............................................232 9.4.1 定位...............................................233 9.4.2 属性...............................................233 9.4.3 相似性..............................................235 9.4.4 区别..............................................238 9.5 事件的类型..............................................240 9.5.1 鼠标事件..............................................240 9.5.2 键盘事件..............................................244 9.5.3 HTML 事件..............................................246 9.5.4 变化事件..............................................251 9.6 跨平台的事件..............................................252 9.6.1 EventUtil 对象..............................................252 9.6.2 添加/删除事件处理函数..............................................252 9.6.3 格式化 event 对象..............................................254 9.6.4 获取事件对象..............................................258 9.6.5 示例..............................................259 9.7 小结..............................................260 第 10 章 高级 DOM 技术...............................................261 10.1 样式编程..............................................261 10.1.1 DOM 样式的方法..............................................263 10.1.2 自定义鼠标提示..............................................264 10.1.3 可折叠区域..............................................265 10.1.4 访问样式表..............................................266 10.1.5 最终样式..............................................270 10.2 innerText 和 innerHTML. 271 10.3 outerText 和 outerHTML. 273 10.4 范围..............................................274 10.4.1 DOM 中的范围..............................................274 10.4.2 IE 中的范围..............................................284 10.4.3 范围在实际中的应用..............................................288 10.5 小结..............................................288 第 11 章 表单和数据完整性 ...............................................289 11.1 表单基础..............................................289 11.2 对<form/>元素进行脚本编写..............................................291 11.2.1 获取表单的引用..............................................291 11.2.2 访问表单字段..............................................291 11.2.3 表单字段的共性..............................................292 11.2.4 聚焦于第一个字段..............................................292 11.2.5 提交表单..............................................293 11.2.6 仅提交一次..............................................294 11.2.7 重置表单..............................................295 11.3 文本框..............................................295 11.3.1 获取/更改文本框的值..............................................296 11.3.2 选择文本..............................................297 11.3.3 文本框事件..............................................298 11.3.4 自动选择文本..............................................298 11.3.5 自动切换到下一个..............................................299 11.3.6 限制 textarea 的字符数..............................................300 11.3.7 允许/阻止文本框中的字符..............................................301 11.3.8 使用上下按键操作数字文本..............................................306 11.4 列表框和组合框..............................................308 11.4.1 访问选项..............................................309 11.4.2 获取/更改选中项..............................................309 11.4.3 添加选项..............................................310 11.4.4 删除选项..............................................311 11.4.5 移动选项..............................................312 11.4.6 重新排序选项..............................................313 11.5 创建自动提示的文本框..............................................313 11.5.1 匹配..............................................314 11.5.2 内部机制..............................................314 11.6 小结..............................................316 第 12 章 表格排序...............................................317 12.1 起点——数组..............................................317 12.2 对单列的表格排序..............................................319 12.2.1 比较函数..............................................320 12.2.2 sortTable()函数..............................................320 12.3 对多列表格进行排序..............................................323 12.3.1 比较函数生成器..............................................323 12.3.2 修改 sortTable()方法..............................................324 12.3.3 逆序排列..............................................325 12.3.4 对不同的数据类型进行排序..............................................327 12.3.5 高级排序..............................................330 12.4 小结..............................................334 第 13 章 拖放...............................................335 13.1 系统拖放..............................................335 13.1.1 拖放事件..............................................336 13.1.2 数据传输对象dataTransfer. 341 13.1.3 dragDrop()方法..............................................345 13.1.4 优点及缺点..............................................346 13.2 模拟拖放..............................................346 13.2.1 代码..............................................347 13.2.2 创建放置目标..............................................349 13.2.3 优点及缺点..............................................352 13.3 zDragDrop. 352 13.3.1 创建可拖动元素..............................................352 13.3.2 创建放置目标..............................................353 13.3.3 事件..............................................353 13.3.4 例子..............................................354 13.4 小结..............................................355 第 14 章 错误处理...............................................356 14.1 错误处理的重要性..............................................356 14.2 错误和异常..............................................357 14.3 错误报告..............................................358 14.3.1 IE(Windows)..............................................358 14.3.2 IE(MacOS)..............................................359 14.3.3 Mozilla(所有平台)..............................................359 14.3.4 Safari(MacOS)..............................................360 14.3.5 Opera 7(所有平台)..............................................361 14.4 处理错误..............................................362 14.4.1 onerror 事件处理函数..............................................362 14.4.2 try...catch 语句..............................................365 14.5 调试技巧..............................................370 14.5.1 使用警告框..............................................370 14.5.2 使用 Java 控制台..............................................371 14.5.3 将消息写入 JavaScript 控制台 (仅限 Opera 7+)..............................................372 14.5.4 抛出自定义错误..............................................372 14.5.5 JavaScript 校验器..............................................373 14.6 调试器..............................................374 14.6.1 Microsoft Script Debugger 374 14.6.2 Venkman. 376 14.7 小结..............................................383 第 15 章 JavaScript 中的 XML.. 384 15.1 浏览器中的 XML DOM 支持..............................................384 15.1.1 IE 中的 XML DOM 支持..............................................384 15.1.2 Mozilla 中 XML DOM 支持..............................................388 15.1.3 通用接口..............................................393 15.2 浏览器中的 XPath 支持..............................................403 15.2.1 XPath 简介..............................................403 15.2.2 IE 中的 XPath 支持..............................................404 15.2.3 Mozilla 中的 XPath 支持..............................................404 15.3 浏览器中的 XSLT 支持..............................................408 15.3.1 IE 中的 XSLT 支持..............................................410 15.3.2 Mozilla 中 XSLT 支持..............................................413 15.4 小结..............................................415 第 16 章 客户端与服务器端的通信...............................................416 16.1 cookie. 416 16.1.1 cookie 的成分..............................................416 16.1.2 其他安全限制..............................................417 16.1.3 JavaScript 中的 cookie. 417 16.1.4 服务器端的 cookie. 419 16.1.5 在客户端与服务器端之间 传递 cookie. 422 16.2 隐藏框架..............................................423 16.3 HTTP 请求..............................................426 16.3.1 使用 HTTP 首部..............................................428 16.3.2 实现的复制品..............................................429 16.3.3 进行 GET 请求..............................................430 16.3.4 进行 POST 请求..............................................430 16.4 LiveConnect 请求..............................................431 16.4.1 进行 GET 请求..............................................431 16.4.2 进行 POST 请求..............................................433 16.5 智能 HTTP 请求..............................................435 16.5.1 get()方法..............................................435 16.5.2 post()方法..............................................438 16.6 实际使用..............................................439 16.7 小结..............................................439 第 17 章 Web 服务...............................................440 17.1 Web 服务快速入门..............................................440 17.1.1 Web 服务是什么?..............................................440 17.1.2 WSDL. 441 17.2 IE 中的 Web 服务..............................................443 17.2.1 使用 WebService 组件..............................................444 17.2.2 WebService 组件例子..............................................445 17.3 Mozilla 中的 Web 服务..............................................447 17.3.1 加强的特权..............................................447 17.3.2 使用 SOAP 方法..............................................448 17.3.3 使用 WSDL 代理..............................................451 17.4 跨浏览器的方案..............................................454 17.4.1 WebService 对象..............................................454 17.4.2 Temperature 服务..............................................456 17.4.3 使用TemperatureService对象..............................................458 17.5 小结..............................................458 第 18 章 与插件进行交互...............................................459 18.1 为何使用插件..............................................459 18.2 流行的插件..............................................460 18.3 MIME 类型..............................................460 18.4 嵌入插件..............................................461 18.4.1 加入参数..............................................461 18.4.2 Netscape 4.x. 462 18.5 检测插件..............................................462 18.5.1 检测 Netscape 式插件..............................................463 18.5.2 检测 ActiveX 插件..............................................467 18.5.3 跨浏览器检测..............................................469 18.6 Java applet 470 18.6.1 嵌入 applet 470 18.6.2 在 JavaScript 中引用 applet 471 18.6.3 创建 applet 471 18.6.4 JavaScript 到 Java 的通信..............................................472 18.6.5 Java 到 JavaScript 的通信..............................................475 18.7 Flash 动画..............................................477 18.7.1 嵌入 Flash 动画..............................................477 18.7.2 引用 Flash 动画..............................................478 18.7.3 JavaScript 到 Flash 的通信..............................................478 18.7.4 Flash 到 JavaScript 通信..............................................481 18.8 ActiveX 控件..............................................483 18.9 小结..............................................485 第 19 章 部署问题...............................................486 19.1 安全性..............................................486 19.1.1 同源策略..............................................486 19.1.2 窗口对象问题..............................................487 19.1.3 Mozilla 特有的问题..............................................488 19.1.4 资源限制..............................................490 19.2 国际化..............................................491 19.2.1 使用 JavaScript 检测语言..............................................491 19.2.2 策略..............................................492 19.2.3 字符串的思考..............................................492 19.3 优化 JavaScript 495 19.3.1 下载时间..............................................495 19.3.2 执行时间..............................................499 19.4 知识产权的问题..............................................512 19.4.1 混淆..............................................512 19.4.2 Microsoft Script Encoder (仅 IE)..............................................513 19.5 小结..............................................514 第 20 章 JavaScript 的未来...............................................515 20.1 ECMAScript 4. 515 20.1.1 Netscape 的提案..............................................515 20.1.2 实现..............................................521 20.2 ECMAScript for XML. 522 20.2.1 途径..............................................522 20.2.2 for each..in 循环..............................................524 20.2.3 新的类..............................................524 20.2.4 实现..............................................532 20.3 小结..............................................532

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值