1 / 29
文档名称:

javascript权威指南.doc

格式:doc   大小:56KB   页数:29页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

javascript权威指南.doc

上传人:wxc6688 2019/11/1 文件大小:56 KB

下载得到文件列表

javascript权威指南.doc

文档介绍

文档介绍:JavaScript权威指南-函数函数本身就是一段JavaScript代码,定义一次但可能被调用任意次。如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法。用于初始化一个新创建的对象的函数被称作构造函数。相对于其他面向对象语言,在JavaScript中的函数是特殊的,函数即是对象。JavaScript可以把函数赋值给变量,或者作为参数传递给其他函数,甚至可以给它们设置属性等。JavaScript的函数可以嵌套在其他函数中定义,这样定义的函数就可以访问它们外层函数中的任何变量。这也就是所谓的“闭包”,它可以给JavaScript带来强劲的编程能力。,有函数语句和函数表达式两种定义方式。//://打印对象所有属性名称和值。functionprintprops(obj){for(varkeyinobj){(key+":"+obj[key]);}}//计算阶乘的递归函数,函数名称将成为函数内部的一个局部变量。functionfactorial(n){if(n<=1)return1;returnn*factorial(n);}//://计算n的平方的函数表达式。这里将一个函数赋给一个变量。varsquare=function(x){returnx*x;}//兔子数列。函数表达式也可以包含名称,方便递归。varfoo=functionfoo(n){if(n<=1)return1;elsefoo(n-1)+foo(n-2);}//数组元素升序排列。函数表达式也能作为参数传递给其他函数。vardata=[5,3,7,2,1];(function(a,b){returna-b;});//函数表达式有时定义后立即调用。vartensquared=(function(x){returnx*x;}(10));函数命名函数名称要求简洁、描述性强,因为这样可以极大改善代码的可读性,方便别人维护代码;函数名称通常是动词或以动词开头的词组。通常来说,函数名编写有两种约定:一种约定是函数名第一个单词首字母小写,后续单词首字母大写,就像likeThis();当函数名包含多个单词时,另一种约定是用下划线来分割单词,就像like_this()。项目中编写方法名时尽量选择一种保持代码风格一致。还有,对于一些私有函数(不作为公用API的一部分),这种函数通常以一条下划线作为前辍。。JavaScript中通常有4种方式来调用函数:作为普通函数;作为对象方法;作为构造函数;通过它们的call()和apply()方法间接调用。下面就通过一些具体示例来演示上述4中函数的调用方式。,通过调用表达式就可直接调用,这种方式很直接也很常见。//定义一个普通函数。varstrict=function(){return!this;};//检测当前运行环境是否为严格模式。//通过函数名直接调用。(strict());注:根据ES3和非严格的ES5对普通函数调用的规定,调用上下文(this)是全局对象;在严格模式下,调用上下文则是undefined。,保存在对象属性里的JavaScript函数被称作“方法”。//定义一个对象直接量。varcalc={a:null,b:null,add:function(){//将函数保存在对象属性中。+;}};//通过对象名调用方法。=1,=2;(());注:对象方法中的调用上下文(this)不同于普通函数中的上下文。这里this指代当前对象。方法链:当方法返回值是一个对象,那么这个对象还可以再调用它的方法。每次调用的结果都是另外一个表达式的组成部分,这种方法调用方式最终会形成一个序列,也被称为“方法链”。所以,在自己设计API的时候,当方法并不需要返回值时,最好直接返回this。这样以后使用API就可以进行“链式调用”风格的编程。需要注意的是,this是一个关键字,Javascript语法不允许给它赋值。再者,关键字this没有作用域的限制,嵌套的函数不会从外层调用它的函数中继承this。也就是说,如果嵌套函数作为方法调用,其this指向为调用它的对象。如果嵌套函数作为函数调用,其this值不是全局对象就是undefined。下面通过一段代码来具体说明。varo={m:function(){//对象中的方法varself=this;//(this===o);//输出true,表明thi