第七章  函数表达式

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

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. python绝技 — 嗅探FTP登录口令

    代码: #!/usr/bin/python #--*--coding=utf-8--*-- import optparse from scapy.all import * def ftpsniff(p ...

  2. 距离VR时代的真正到来还有多久?

    2016年被称为是VR元年,各大VR设备商的宣传攻势铺天盖地,众VR产品看的人眼花缭乱.随着平民化进程不断推进以及渗透率的提升,VR成为近两年来最引人关注的焦点,在众多领域的共同作用下,VR时代是否即 ...

  3. [SQL基础教程] 4-2 数据删除(DELETE)

    [SQL基础教程] C4 数据更新 4-2 数据删除(DELETE) DROP TABLE / DELETE DROP TABLE - 完全删除表 DELETE - 仅删除数据,保留表容器 DELET ...

  4. gridview动态添加行(不用datatable实现)

    GridViewRow newrow = , , DataControlRowType.Separator, DataControlRowState.Normal); TableCell[] tc=] ...

  5. mysql的部分基础知识....

  6. SQL总结之导入导出

    (5)还原数据库[倒库] [数据泵模式]先要在D盘创建个目录,如D:/dbback 然后去plsql中创建目录sql命令:create directory dbback as 'D:\dbback'; ...

  7. MyBatis-Generator 逆向工程(生成异常缺少部分的方法)

    今日在使用 MyBatis-Generator 逆向工程时遇到了生成 mapper.java  , mapper.xml  时缺少部分方法. 正常的 Mapper.java 示例: public in ...

  8. HDU 4403 A very hard Aoshu problem

    暴力$dfs$. 先看数据范围,字符串最长只有$15$,也就是说枚举每个字符后面是否放置“$+$”号的复杂度为${2^{15}}$. 每次枚举到一种情况,看哪些位置能放“$=$”号,每个位置都试一下, ...

  9. ajax中的stasus错误详解

    一.英文版解析 0: (Uninitialized) the send( ) method has not yet been invoked. 1: (Loading) the send( ) met ...

  10. 矩阵赋值实例(matrixAssign)

    题目:给一个二维数组赋值. 分析:主机端代码完成的主要功能: 启动CUDA,使用多卡时应加上设备号,或使用cudaSetDevice()设置GPU设备. 为输入数据分配内存空间 初始化输入数据 为GP ...