1.函数命名规范
函数命名通常以动词为前缀的词组。通常第一个字符小写。当包含多个单词时,一种约定是将单词以下划线分割,就像"like_Zqz()"。
还有一种就是"likeZqz()"。有些些函数是用作内部用的或者为私有函数通常以一条下划线为前缀,就像"_zqzName()"。
 
2.以表达式方式定义的函数
如:
var zqz=function (){
return "zhaoqize";
}
在使用的时候必须把它赋值给一个变量,这里就是zqz。d这里我们就想了之前说的变量提前了JavaScript权威设计--JavaScript类型,值,变量(简要学习笔记四)。但给变量赋值是不会提前的,所以表达式方式定义的函数在定义之前无法调用。
上面的函数是有return返回的。与之不同的是无返回值的函数,这种函数有时候被称为过程。
 
3.函数声明语句
function a(){

}
上面是函数声明语句。函数声明语句并非真正的语句。他们作为顶级语句可以出现在全局代码里。或者内嵌到其他函数中,但是他们不能出现在循环语句,条件语句等中。但函数定义表达式可以出现在任何地方,包括循环语句,条件判断等中。
下面是函数定义表达式:
var a=function (){

}
 
4.函数调用的四种方式
方式一:作为函数
function a(){

}
//调用
a();
 
方式二:作为方法
如:
var calcu={    //定义对象直接量
ope:1,
opa:1,
add:function(){
this.result=this.ope+this.opa; //this指代当前对象
}
}
//调用
calcu.add(); //这个方法调用计算1+1的结果,先调用该方法,然后再去获取它的值,执行calcu.result
 
这是一个调用表达式,它包括函数表达式calcu.add,函数表达式本身就是一个属性访问表达式,这意味着该函数被当做一个方法,而不是作为一个普通函数来调用。
 
calcu.result;    //
 
方法调用与函数调用重要区别:调用上下文
 
属性访问表达式由两部分组成:一个对象(calcu),一个属性名称(add)。
在这样的方法表达式里,对象calcu调用上下文,函数体可以使用关键字this来引用该对象(这个对象就是calcu)。
看下面两行代码,假设功能一样,都作用于对象rect:
 
rect.setSize(width,height);
setRectSize(rect,width,height);
 
第一句可以清晰的看出这个函数执行的载体是rect对象,函数中的所有操作都是基于这个对象。
 
当方法不需要返回值时,最好直接返回this,如果在设计的API中一直采用这种方式每个方法都返回this,使用API就可以进行"链式调用"风格的编程,在这种编程中,只要制定一次要调用的对象即可。余下的方法都可以基于此进行调用。
典型的例子就是jQuery。
 
this的指向:
例子说明:(这个例子适合深度思考,结合jQuery)
var o={    //对象o
m:function(){ //对象中的方法m()
var self=this; //将this值保存至一个变量中
console.log(this===o) //true,this就是对象o
f(); //调用嵌套函数f function f(){
console.log(this===o); //false:this指向的是全局对象或者undefined
console.log(self===o); //true:self指向外部函数的this值
}
}
}
//调用
o.m();
 
误解:很多人误以为上面例子中嵌套函数f中的this会指向外层函数的上下文this。
如果你想访问外部的this,需要将this的值保存在yige变量中。这个变量和内部函数都在同一个作用域。
 
这里有个链接专门是用来解释this中所指的问题:http://www.ibm.com/developerworks/cn/web/1207_wangqf_jsthis/
 
方式三:作为构造函数(明天学习)
方式四:通过call()与apply()方法间接调用(明天学习)
 

JavaScript权威设计--JavaScript函数(简要学习笔记十)的更多相关文章

  1. JavaScript权威设计--事件处理介绍(简要学习笔记十七)

    1.事件相关概念 事件类型:一个用来说明发生什么类型事件的字符串 事件目标:是发生的事件或与之相关的对象. 事件处理程序(事件监听程序):是处理货响应事件的函数. 事件对象:是与特定事件相关并且包含有 ...

  2. JavaScript权威设计--Window对象(简要学习笔记十三)

    1.Window对象是所有客户端JavaScript特性和API的主要接入点. Window对象中的一个重要属性是document,它引用Document对象. JavaScript程序可以通过Doc ...

  3. JavaScript权威设计--JavaScript函数(简要学习笔记十一)

    1.函数调用的四种方式 第三种:构造函数调用 如果构造函数调用在圆括号内包含一组实参列表,先计算这些实参表达式,然后传入函数内.这和函数调用和方法调用是一致的.但如果构造函数没有形参,JavaScri ...

  4. javascript权威指南第6版学习笔记

    javascript权威指南第6版学习笔记 javascript数组.函数是特殊对象 看一点少一点. 3.1.4 hello.js内容是 var x=.3-.2;var y=.2-.1 console ...

  5. JavaScript权威设计--命名空间,函数,闭包(简要学习笔记十二)

    1.作为命名空间的函数 有时候我们需要声明很多变量.这样的变量会污染全局变量并且可能与别人声明的变量产生冲突. 这时.解决办法是将代码放入一个函数中,然后调用这个函数.这样全局变量就变成了 局部变量. ...

  6. JavaScript权威设计--Window对象之Iframe(简要学习笔记十四)

    1.Window对象属性的文档元素(id) 如果在HTML文档中用id属性来为元素命名,并且如果Window对象没有此名字的属性,Window对象会赋予一个属性,它的名字是id属性的值,而他们的值指向 ...

  7. JavaScript权威设计--JavaScript数组(简要学习笔记九)

    1.数组的创建 如: var a=[1.1,null,"a"]; var b=[1, ,3]; //中间的那个元素是undefined var c=[ , , ] 这里c.leng ...

  8. JavaScript权威设计--JavaScript对象(简要学习笔记七)

    1.with语句 语法: width(object){ statement } with语句可用于临时扩展作用域链.作用域链可以按序检索的对象列表,通过它可以进行变量名解析. with将object添 ...

  9. JavaScript权威设计--JavaScript表达式与运算符,语句(简要学习笔记六)

    1.delete是一元操作符,用来删除对象属性或者元素. var a={ x:1, y:2 } delete a.x; //删除x属性 “x”in a //false:a对象中已经不存在x属性 ale ...

随机推荐

  1. mapreduce多文件输出的两方法

    mapreduce多文件输出的两方法   package duogemap;   import java.io.IOException;   import org.apache.hadoop.conf ...

  2. 【.net 深呼吸】细说CodeDom(5):类型成员

    前文中,老周已经厚着脸皮介绍了类型的声明,类型里面包含的自然就是类型成员了,故,顺着这个思路,今天咱们就了解一下如何向类型添加成员. 咱们都知道,常见的类型成员,比如字段.属性.方法.事件.表示代码成 ...

  3. 可爱的豆子——使用Beans思想让Python代码更易维护

    title: 可爱的豆子--使用Beans思想让Python代码更易维护 toc: false comments: true date: 2016-06-19 21:43:33 tags: [Pyth ...

  4. ZIP压缩算法详细分析及解压实例解释

    最近自己实现了一个ZIP压缩数据的解压程序,觉得有必要把ZIP压缩格式进行一下详细总结,数据压缩是一门通信原理和计算机科学都会涉及到的学科,在通信原理中,一般称为信源编码,在计算机科学里,一般称为数据 ...

  5. 在ubuntu16.10 PHP测试连接MySQL中出现Call to undefined function: mysql_connect()

    1.问题: 测试php7.0 链接mysql数据库的时候发生错误: Fatal error: Uncaught Error: Call to undefined function mysqli_con ...

  6. geotrellis使用(二十八)栅格数据色彩渲染(多波段真彩色)

    目录 前言 实现过程 总结 一.前言        上一篇文章介绍了如何使用Geotrellis渲染单波段的栅格数据,已然很是头疼,这几天不懈努力之后工作又进了一步,整清楚了如何使用Geotrelli ...

  7. VSCode添加Sciter脚本Tiscript高亮支持

    Sciter中的Tiscript脚本不是标准的Javascript,是对Javascript的扩展.所以在常用的编辑器和IDE上对于高亮的支持很不好. 不过在Sciter论坛中找到了在VSCode上的 ...

  8. Docker与CI持续集成/CD

    背景        Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制 ...

  9. appium+robotframework环境搭建

    appium+robotframework环境搭建步骤(Windows系统的appium自动化测试,只适用于测试安卓机:ios机需要在mac搭建appium环境后测试) 搭建步骤,共分为3部分: 一. ...

  10. [PHP源码阅读]array_pop和array_shift函数

    上篇文章介绍了PHP添加元素到数组的函数,那么当然有从数组中删除元素.array_pop和array_shift只从数组的头或尾删除一个元素.经过阅读源码,发现这两个函数的实现都是调用了同一个函数-- ...