7. javacript高级程序设计- 函数表达式
1. 函数表达式
1.1 函数定义
函数定义的方式有两种:一种是函数声明,另一种就是函数表达式。
(1). 函数声明:函数声明的重要特征就是函数声明提示,函数声明会在函数执行前执行
function functionName(arg0,arg1,arh2){
//函数体
}
(2). 函数表达式
var functionName = function (arg0,arg1,arh2){
//函数体
}
1.2 递归
递归函数是在一个函数通过名字调用自身的情况下构成的,例如:
function factorial(num) { if (num <= 1) { return 1; } else { return num * factorial(num - 1); } } |
但是下面的代码出导致出错,
var anotherFactorial = factorial; factorial = null; alert(anotherFactorial(4)); //error |
arguments.callee是一个指向正在执行的函数的指针,可以利用它来实现对函数的递归调用
function factorial(num) { if (num <= 1) { return 1; } else { return num * arguments.callee(num - 1); } } |
在严格模式下,arguments.callee调用会失败,可以使用命名函数表达式来达成相同的结果
var factorial = (function f(num) { if (num <= 1) { return 1; } else { return num * f(num - 1); } }) |
1.3 闭包
闭包指的有权访问另一个函数作用域中的变量的函数。创建闭包的最常用方式,就是在一个函数内部创建另一个函数。
1.3.1 闭包与变量
闭包只能取得包含函数中任何变量的最后一个值
function createFunctions(){ var result = new Array(); for (var i = 0; i<10;i++) { result[i] = function(){ return i; } }; return result; } |
以上函数每个值取得都是10,为了让函数返回正确的值,可以使用匿名函数强制让闭包的行为符合预期。
function createFunctions() { var result = new Array(); for (var i = 0; i < 10; i++) { result[i] = function(num) { return function() { return num; } }(i); }; return result; } |
1.3.2 关于this对象
this对象是在运行时基于函数的执行环境绑定的,在全局变量中,this等于window,而当函数在被作为某个对象的方法调用时,this等于那个对象,不过,匿名函数的执行环境具有全局性,因此其this通常指向window。
1.4 模仿块级作用域
javascript中没有块级作用域的概念,匿名函数可以用来模仿块级作用域。
用来模仿块级作用域(通常称为私有作用域)的匿名函数的语法如下所示:
(function(params){ //块级作用域 })(params) |
1.5 私有变量
严格来说javascript中没有私有成员的概念,所有的对象属性都是公共的,不过,在任何函数中定义的变量都是私有的,通过在函数中定义变量来实现私有变量。
var obj = function() { var privateVar = 10; function privateFunc() { return false; } return { publicProperty: true. publicMethod: function() { privateVar++; return privateFunc(); } } }(); |
7. javacript高级程序设计- 函数表达式的更多相关文章
- 2020/06/05 JavaScript高级程序设计 函数表达式
函数表达式 函数定义的两种方式: 函数声明(函数声明提升,非标准name属性可访问给函数指定的名字) 函数声明提升:执行代码前先读取函数声明 function functionName(arg0, a ...
- Javascript高级程序设计——函数声明与函数表达式的区别
在Javascript中,函数是Functioin类型的实例,所以函数也具备属性和方法,因为函数是对象,所以函数名自然就是指向对象的指针啦. 函数可以通过声明语法和表达式来定义: 声明:functio ...
- js-面向对象的程序设计,函数表达式
面向对象的程序设计: 1.属性类型:数据属性.访问器属性 数据属性:wirtable:false –只读:如果尝试为它赋值,会忽略 Configurable:false—不能从对象中删除属性 在调用O ...
- JavaScript高级程序设计--函数小记
执行环境和作用域链 每个函数都有自己的执行环境.当执行流进入一个函数时,函数 的环境就会被推入一个环境栈中.而在函数执行之后,栈将其环境弹出,把控制权返回给之前的执行环境. 当代码在一个环境中 ...
- Javascript高级程序设计——函数内部属性与函数属性
函数内部属性 函数内部有两个特殊的属性arguments和this.其中,arguments是类数组对象,包含传入函数中的所有值,这个arguments还有一个属性:callee,这个属性是一个指针, ...
- Javascript高级程序设计——函数
函数Function 通过函数封装多条语句,在任何地方执行.javascript函数不会重载,相同名字函数,名字属于后定义的函数通过function关键词声明. function functionNa ...
- 22. javacript高级程序设计-高级技巧
1. 高级技巧 1.1 函数 l 可以使用惰性载入函数,将任何分支推迟到第一个调用函数的时候 l 函数绑定可以让你创建始终在指定环境中运行的函数,同时函数柯里化可以让你创建已经填写了某些参数的函数 l ...
- 21. javacript高级程序设计-Ajax与Comet
1. Ajax与Comet 1.1 XMLHttpRequest对象 IE5是第一款引入XHR对象的浏览器,IE5中是通过MSXML库中的一个ActiveX对象实现的.因此在IE中可能存在MSXML2 ...
- 13. javacript高级程序设计-事件
1. 事件 1.1 事件流 事件流描述的是从页面中接受事件的顺序,IE的事件是冒泡流,而Netscape Communicator的事件流是事件捕捉流. 1.1.1 事件冒泡 <!DOCTYPE ...
随机推荐
- java.lang.reflect.Field
java.lang.reflect.Field 一.Field类是什么 Field是一个类,位于java.lang.reflect包下. 在Java反射中 Field类描述的是 类的属性信息,通俗来讲 ...
- IOS表情存入MYSQL数据库失败
从 MySQL 5.5.3 开始,MySQL 支持一种 utf8mb4 的字符集,这个字符集能够支持 4 字节的 UTF8 编码的字符. utf8mb4 字符集能够完美地向下兼容 utf8 字符串.在 ...
- uml面向对象建模基础总结
uml九种图,其中的细节不说了.在后面的具体使用中提到这九种图. 建模流程: 1.分析需求. 2.通过分析名词,发现类,使用到类图. 3.建立用例模型,通过参与者分析用例,使用到用例图. 4.为用例建 ...
- 大数据之sqoop
一.安装: 1 解压然后把mysql的驱动放在$SQOOP_HOME/lib 目录中2. conf/sqoop-en.sh export HADOOP_COMMON_HOME=/home/hadoop ...
- Javascript高级程序设计——基本类型和引用类型的值
ECMAScript中的变量有两种不同的数据类型的值: 基本类型:基本类型的值是简单的数据段.包括:Undefined.Null.Number.Boolean.String五种 引用类型:引用类型的值 ...
- 使用Oracle ODP.NET 11g的.NET程序发布方法
使用Oracle ODP.NET 11g的.NET程序发布方法 内容摘要:ODP.NET 11g是Oracle发布的供.NET程序访问Oracle数据库的ADO.NET组件,比微软自带的Oracle组 ...
- JS获取地址栏参数
获取地址栏参数(其中name为你所需要的参数值) function GetQueryString(name) { var reg = new RegExp("(^|&)" ...
- EF自动生成的模型edmx代码分析
edmx代码分析 本文分析Entity Framework从数据库自动生成的模型文件代码(扩展名为edmx). 1. 概述 本文使用的数据库结构尽量简单,只有2个表,一个用户表和一个分公司表(相当于部 ...
- iOS开发——UI进阶篇(五)通知、代理、kvo的应用和对比,购物车
一.通知 1.通知中心(NSNotificationCenter)每一个应用程序都有一个通知中心(NSNotificationCenter)实例,专门负责协助不同对象之间的消息通信任何一个对象都可以向 ...
- leetcode150 Evaluate Reverse Polish Notation
Evaluate the value of an arithmetic expression in Reverse Polish Notation. Valid operators are +, -, ...