第七章  函数表达式

一、定义函数的方式有两种:函数声明和函数表达式。

1.函数声明:

function functionName(arg0 , arg1 , arg2){
//函数体...
}

函数声明的一个重要特征就是函数声明提升,在读取代码之前会先读取函数声明。意味着可以将函数声明放在调用代码之后。

2.函数表达式:

var functionName = function(arg0 , arg1 , arg2){
//函数体...
}

创建一个函数并将它赋值给一个变量,这种情况下创建的函数叫做匿名函数。因为function后面没有标识符。函数表达式与其他表达式一样使用前必须先赋值。

二、匿名函数的作用:

1.把函数当成值来用时,可以使用匿名函数。

2.

三、闭包

  闭包是指有权访问另一个函数作用域中的变量的函数。

  如下代码:

function createFunction(){
  var result = new Array();
  for(var i = 0 ; i < 10 ; i++){
    result[i] = function(){
      return i;
    };
  }
  return result;
}

  会有一个明显的问题是返回的所有i值都为10,即数组的最后一个i。

  解决方法是:

function createFunction(){
  var result = new Array();
  for(var i = 0 ; i < 10 ; i++){
    result[i] = function(num){
      return function(){
        return num;
      };
    }(i);
    }
  return result;
}

四、私有变量

  私有变量包括函数的参数、局部变量和在函数内部定义的其他函数。在函数内部可以访问这个变量,但在函数外部则不能访问它们。如果在这个函数内部创建一个闭包,那么闭包通过自己的作用域也可以访问这些变量。有两种在对象上创建特权方法的方式。第一种是在构造函数中定义特权方法,基本模式如下:

function MyObject(){
//私有变量和私有函数
var privateVariable = 10;
function privateFunction(){
return false;
}
//特权方法
this.publicMethod = function(){
privateVariable++;
return privateFunction();
};
}function MyObject(){
//私有变量和私有函数
var privateVariable = 10;
function privateFunction(){
return false;
}
//特权方法
this.publicMethod = function(){
privateVariable++;
return privateFunction();
};
}

  

第二种:在私有作用域中定义私有变量或函数,同样也可以创建特权方法,其基本模式如下:

(function(){
//私有变量和私有函数
var privateVariable = 10 ;
function privateFunction(){
return false;
}
//构造函数
MyObject = function(){
};
//公有、特权方法
MyObject.prototype.publicMethod = function(){
privateVariable++;
return privateFunction();
}; })();

  

JS复习:第七章的更多相关文章

  1. JS复习第五章

    第五章 引用类型 一.Object类型 创建object实例的方式有两种. 第一种是使用new操作符后跟object构造函数,如下所示: ver person = new Object( ) ; pe ...

  2. 《数据结构与算法分析:C语言描述》复习——第七章“哈希”——哈希表

    2014.06.22 12:36 简介: 哈希是一种数学思想,将不定长数据通过函数转换为定长数据.不定长数据通常意味着碎片化,动态分配内存等等影响存储和性能的因素.当这个定长数据是一个无符号整数时,可 ...

  3. D3.js的v5版本入门教程(第七章)—— 比例尺的使用

    D3.js的v5版本入门教程(第七章) 比例尺在D3.js中是一个很重要的东西,我们可以这样理解d3.js中的比例尺——一种映射关系,从domain映射到range域(为什么会是domain和rang ...

  4. JS复习--更新结束

    js复习-01---03 一 JS简介 1,文档对象模型 2,浏览器对象模型 二 在HTML中使用JS 1,在html中使用<script></script>标签 2,引入外部 ...

  5. Knockout应用开发指南 第七章:Mapping插件

    原文:Knockout应用开发指南 第七章:Mapping插件 Mapping插件 Knockout设计成允许你使用任何JavaScript对象作为view model.必须view model的一些 ...

  6. JavaScript DOM编程艺术-学习笔记(第七章)

    第七章: 1.dom方法创建并且插入标签:(这种方法并没有改变文档的物理内容,而是在改变dom树) ①创建元素节点:createElement(); ②内部前插入:appendChild() ③创建文 ...

  7. ArcGIS API for JavaScript 4.2学习笔记[24] 【IdentifyTask类】的使用(结合IdentifyParameters类)(第七章完结)

    好吧,我都要吐了. 接连三个例子都是类似的套路,使用某个查询参数类的实例,结合对应的Task类,对返回值进行取值.显示. 这个例子是Identify识别,使用了TileLayer这种图层,数据来自Se ...

  8. jQuery系列 第七章 jQuery框架DOM操作

    第七章 jQuery框架的选择器 jQuery框架继承和优化了JavaScript访问DOM对象的特性,我们使用jQuery框架提供的api可以更加方便的操作DOM对象. 7.1 创建DOM节点 使用 ...

  9. Web前端框架与移动应用开发第七章

    1.练习1:焦点图切换 html: <!doctype html><html><head> <meta charset="utf-8" / ...

随机推荐

  1. Spark-RDD/DataFrame/DateSet

    RDD 优点: 编译时类型安全编译时就能检查出类型错误 面向对象的编程风格直接通过类名点的方式来操作数据 缺点: 序列化和反序列化的性能开销无论是集群间的通信, 还是IO操作都需要对对象的结构和数据进 ...

  2. Vs2015 Ef 连接Oracle 出现OracleInternal.Common.ConfigBaseClass 的解决办法

    如果配置没问题的话,就是 Oracle.ManagedDataAccess 在全局程序集的版本问题 解决方法方法 将Oracle.ManagedDataAccess  GAC全局程序集中移除 1:用C ...

  3. CG 标准函数库

    (1)数学函数 函数 功能描述 abs(x) 返回输入参数的绝对值 acos(x) 反余切函数,输入参数范围为[-1,1], 返回[0,π]区间的角度值 all(x) 如果输入参数均不为0,则返回tu ...

  4. C# CodeHelper

    using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using Syste ...

  5. CoreJavaE10V1P3.4 第3章 Java的基本编程结构-3.4 变量

    1.在Java中,每一个变量都必须有一个类型,在变量声明是,类型必须在变量名之前.示例如下: double salary; int vacationDays; long earthPopulation ...

  6. CSS3之3D效果中的transform运用

    css3中添加了很多新的标签 属性 描述 css transform 向元素应用 2D 或 3D 转换. 3 transform-origin 允许你改变被转换元素的位置. 3 transform-s ...

  7. 【原创】RMQ - ST算法详解

    ST算法: ID数组下标: 1   2   3   4   5   6   7   8   9    ID数组元素: 5   7   3   1   4   8   2   9   8 1.ST算法作 ...

  8. Canvas裁剪和Region、RegionIterator

    主要是看这边文章学习:http://blog.csdn.net/lonelyroamer/article/details/8349601 Region.op参数 DIFFERENCE(0), //最终 ...

  9. 阿里云Linux服务器挂载硬盘分区

    查看所有硬盘与分区 fdisk -l 运行命令 fdisk /dev/xvdb 根据提示,依次输入 n p 1    (数字一 不是 L) 回车 回车 w 提示 Syncing disks.时,表示已 ...

  10. vb.net 结束进程

    Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ...