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高级程序设计- 函数表达式的更多相关文章

  1. 2020/06/05 JavaScript高级程序设计 函数表达式

    函数表达式 函数定义的两种方式: 函数声明(函数声明提升,非标准name属性可访问给函数指定的名字) 函数声明提升:执行代码前先读取函数声明 function functionName(arg0, a ...

  2. Javascript高级程序设计——函数声明与函数表达式的区别

    在Javascript中,函数是Functioin类型的实例,所以函数也具备属性和方法,因为函数是对象,所以函数名自然就是指向对象的指针啦. 函数可以通过声明语法和表达式来定义: 声明:functio ...

  3. js-面向对象的程序设计,函数表达式

    面向对象的程序设计: 1.属性类型:数据属性.访问器属性 数据属性:wirtable:false –只读:如果尝试为它赋值,会忽略 Configurable:false—不能从对象中删除属性 在调用O ...

  4. JavaScript高级程序设计--函数小记

    执行环境和作用域链   每个函数都有自己的执行环境.当执行流进入一个函数时,函数 的环境就会被推入一个环境栈中.而在函数执行之后,栈将其环境弹出,把控制权返回给之前的执行环境.   当代码在一个环境中 ...

  5. Javascript高级程序设计——函数内部属性与函数属性

    函数内部属性 函数内部有两个特殊的属性arguments和this.其中,arguments是类数组对象,包含传入函数中的所有值,这个arguments还有一个属性:callee,这个属性是一个指针, ...

  6. Javascript高级程序设计——函数

    函数Function 通过函数封装多条语句,在任何地方执行.javascript函数不会重载,相同名字函数,名字属于后定义的函数通过function关键词声明. function functionNa ...

  7. 22. javacript高级程序设计-高级技巧

    1. 高级技巧 1.1 函数 l 可以使用惰性载入函数,将任何分支推迟到第一个调用函数的时候 l 函数绑定可以让你创建始终在指定环境中运行的函数,同时函数柯里化可以让你创建已经填写了某些参数的函数 l ...

  8. 21. javacript高级程序设计-Ajax与Comet

    1. Ajax与Comet 1.1 XMLHttpRequest对象 IE5是第一款引入XHR对象的浏览器,IE5中是通过MSXML库中的一个ActiveX对象实现的.因此在IE中可能存在MSXML2 ...

  9. 13. javacript高级程序设计-事件

    1. 事件 1.1 事件流 事件流描述的是从页面中接受事件的顺序,IE的事件是冒泡流,而Netscape Communicator的事件流是事件捕捉流. 1.1.1 事件冒泡 <!DOCTYPE ...

随机推荐

  1. Java Programming Test Question 1

    public class JPTQuestion1 { public static void main(String[] args) { String s1 = "abc"; St ...

  2. css1-css3的那些模糊点

    css很重要, 但也不是万能的, 也不能抛弃dom 元素和 元素的属性!! 很多时候, dom "元素" 的 "属性" 也很重要 也很实用! 要结合属性来写 包 ...

  3. fedora23的firefox不能播放优酷视频?

    安装了多次 firefox的 flash player插件, 也设置了 /usr/lib/mozilla/plugins/libflashplayer.so的权限为777, 而且所有者 也是root. ...

  4. 序列化反序列化api(入门级)

    定义: java序列化是指把Java对象转换为字节序列的过程:而Java反序列化是指把字节序列恢复为Java对象的过程. 为什么字符串通常也会进行序列化? 对象需要进行序列化的原因:保证对象的状态不变 ...

  5. 【Junit】JUnit-4.12使用报java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing错误

    下载了最新的JUnit版本,是4.12,结果尝试使用发现总是报java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing这样的错误, 上网查 ...

  6. 基于iSCSI的SQL Server 2012群集测试(五)--镜像,作业,复制分发测试

    7.1.镜像测试 群集可以正常镜像到非群集环境,本次测试采用,无见证服务器的sql server验证的镜像连接,不同的是群集环境的镜像IP是采用SQL Server虚拟IP进行通信连接. 群集服务器: ...

  7. su root 和su - root 的区别

    su - root  is   the same as su - just like login as root, then the shell is login shell,which mean i ...

  8. Perl 正则表达式

    匹配:m/<regexp>;/ (还可以简写为 /<regexp>;/ ,略去 m)替换:s/<pattern>;/<replacement>;/转化: ...

  9. poj 3744 Scout YYF I(概率dp,矩阵优化)

    Scout YYF I Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5020   Accepted: 1355 Descr ...

  10. 最新《App Store审核指南》翻译

    感谢您付出宝贵的才华与时间来开发iOS应用程程序.从职业与报酬的角度而言,这对于成千上万的开发员来说一直都是一项值得投入的事业,我们希望帮助您加入这个成功的组织.我们发布了<App Store审 ...