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. Angular2入门系列教程3-多个组件,主从关系

    上一篇 Angular2项目初体验-编写自己的第一个组件 好了,前面简单介绍了Angular2的基本开发,并且写了一个非常简单的组件,这篇文章我们将要学会编写多个组件并且有主从关系 现在,假设我们要做 ...

  2. Java初始化过程

    这篇文章主要讲解Java在创建对象的时候,初始化的顺序.主要从以下几个例子中讲解: 继承关系中初始化顺序 初始化块与构造器的顺序 已经加载过的类的初始化顺序 加载父类,会不会加载子类 创建子类对象会不 ...

  3. MVC5+EF6+MYSQl,使用codeFirst的数据迁移

    之前本人在用MVC4+EF5+MYSQL搭建自己的博客.地址:www.seesharply.com;遇到一个问题,就是采用ef的codefirst模式来编写程序,我们一般会在程序开发初期直接在glob ...

  4. ASP.NET MVC5+EF6+EasyUI 后台管理系统(55)-Web打印

    系列目录 前言 1.本次主要弥补工作流,用户表单数据的打印 2.使用JQprint做为web打印插件 3.兼容:FireFox,Chrome,IE. 4.没有依赖也没有配置,使用简单 代码下载:htt ...

  5. ActiveRecord模式整理

    DAO Data Access Object,数据访问对象 DAO是一个软件设计的指导原则,在核心J2EE模式中是这样介绍DAO模式的:为了建立一个健壮的J2EE应用,应该将所有对数据源的访问操作抽象 ...

  6. Android事件分发机制浅谈(一)

    ---恢复内容开始--- 一.是什么 我们首先要了解什么是事件分发,通俗的讲就是,当一个触摸事件发生的时候,从一个窗口到一个视图,再到一个视图,直至被消费的过程. 二.做什么 在深入学习android ...

  7. Mysql - 触发器/视图

    触发器在之前的项目中, 应用的着实不多, 没有办法的时候, 才会去用这个. 因为这个东西在后期并不怎么好维护, 也容易造成紊乱. 我最近的项目中, 由于数据库设计(别人设计的)原因, 导致一些最简单功 ...

  8. Idea下用SBT搭建Spark Helloworld

    没用过IDEA工具,听说跟Eclipse差不多,sbt在Idea其实就等于maven在Eclipse.Spark运行在JVM中,所以要在Idea下运行spark,就先要安装JDK 1.8+ 然后加入S ...

  9. Linux测试环境搭建的学习建议

    随着Linux应用的扩展许多朋友开始接触Linux,根据学习Windwos的经验往往有一些茫然的感觉:不知从何处开始学起.这里介绍学习Linux测试环境搭建的一些建议. 一.Linux测试环境搭建从基 ...

  10. Struts2数据校验

    Struts2数据校验 1.常见数据校验方法 表单数据的校验方式: 表单中的数据必须被效验以后才能够被使用,常用的效验方式分为两种: 前台校验:也称之为客户端效验,主要是通过JS编程的方式进行表单数据 ...