一、定义函数的方式:
1、函数声明

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

注释:关于函数声明,一个重要的特征就是函数声明提升,意思是在执行代码之前会先读取函数声明。这就意味这可以在函数声明放在调用它的语句后面。

2、函数表达式

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

注释:函数表达式与其他表达式一样,在使用前必须先赋值。

二、递归
递归函数是在一个函数通过名字调用自身的情况下构成的

function factorial(num){if(num<=1){return 1;
}else
return num*factorial(num-1);
}
var anotherF = factorial;
factorial = null;
alert(anotherF(4));

以上代码在执行的时候会发生错误。
原因:将factorial赋值给anotherF,这意味着有一个新的名为anotherF的指针指向了factorial了,但当factorial被赋值为null,则意味着factorial不在指向原本的函数,原本函数回调的自身函数也不会存在,因此在执行的时候会发生错误。
改正:

function factorial(num){if(num<=1){return 1;
}else
return num*arguments.callee(num-1);
}
var anotherF = factorial;
factorial = null;
alert(anotherF(4));

arguments.callee()会指向一个正在执行的函数,在上面的代码中,它会指向anotherF函数。使用arguments.callee()总比使用函数名更加保险。

注意:在严格模式下(严格模式的使用很简单,只有在代码首部加入字符串 “use strict”。必须在首部即首部指其前面没有任何有效js代码除注释,否则无效),不能通过脚本访问arguments.callee,访问这个属性会导致错误。
可以使用命名函数表达式来达成相同的效果。

//即使把函数赋值给另一个变量,函数名f还是存在着还是有效的。
var factorial = (function f(num){if (num <= 1){return 1;}else{return num*f(num-1);}
});

三、闭包
闭包是指有权访问另一个函数作用域中的变量的函数。
创建闭包的常见方式,就是在一个函数内部创建另一个函数。内部的函数的作用域链中包含外部函数的作用域。


注意:由于闭包会包含其外部函数的作用域,所以其内存占用会更多一点,过度使用闭包会使得内存占用过多。

关于this对象
this对象是在运行时基于函数执行环境绑定的。在全局的时候,this指向window,当函数被作为某个对象的方法调用时,this指向调用它的对象。
匿名函数的执行环境具有全局性,因此this对象指向window。

JavaScript的函数表达式相关推荐

  1. 一文探索 JavaScript 最强大特性—函数表达式

    函数是 ECMAScript 中最有意思的部分之一,这主要是因为函数实际上是对象.每个函数都是 Function 类型的实例,而 Function 也有属性和方法,跟其他引用类型一样.因为函数是对象, ...

  2. JavaScript 函数声明,函数表达式,匿名函数,立即执行函数之区别

    函数声明:function fnName () {-};使用function关键字声明一个函数,再指定一个函数名,叫函数声明. 函数表达式 var fnName = function () {-};使 ...

  3. 深入理解JavaScript系列(2):揭秘命名函数表达式(转)

    前言 网上还没用发现有人对命名函数表达式进去重复深入的讨论,正因为如此,网上出现了各种各样的误解,本文将从原理和实践两个方面来探讨JavaScript关于命名函数表达式的优缺点. 简 单的说,命名函数 ...

  4. 深入理解JavaScript系列(4):立即调用的函数表达式

    前言 大家学JavaScript的时候,经常遇到自执行匿名函数的代码,今天我们主要就来想想说一下自执行. 在详细了解这个之前,我们来谈了解一下"自执行"这个叫法,本文对这个功能的叫 ...

  5. Javascript 函数声明和函数表达式的区别

    2019独角兽企业重金招聘Python工程师标准>>> Javascript Function无处不在,而且功能强大!通过Javascript函数可以让JS具有面向对象的一些特征,实 ...

  6. js调用php函数兵每秒刷新,深入理解JavaScript立即调用函数表达式(IIFE)

    立即调用函数 目录一.了解立即调用函数表达式 二.立即调用函数表达式报错了? 三.使用立即调用函数的正确姿势 四.常见使用场景 写在最后 一.了解立即调用函数表达式 1.1 思维导图 1.2 什么是立 ...

  7. JavaScript程序开发(十四)—函数声明与函数表达式

    函数声明和函数表达式虽然都是在声明一个函数,但是二者有区别,解析器对二者的解析并非是一视同仁的.解析器会率先解析读取函数声明,并使其可以在执行任何代码前可用(可以访问):至于函数表达式,则必须等到解析 ...

  8. JavaScript的函数声明与函数表达式的区别

    1)函数声明(Function Declaration); // 函数声明function funDeclaration(type){return type==="Declaration&q ...

  9. JavaScript中的函数表达式

    在JavaScript中,函数是个非常重要的对象,函数通常有三种表现形式:函数声明,函数表达式和函数构造器创建的函数. 本文中主要看看函数表达式及其相关的知识点. 函数表达式 首先,看看函数表达式的表 ...

最新文章

  1. Task04:青少年软件编程(Python)等级考试模拟卷(一级)
  2. php里面执行python,在php中执行python
  3. docker 构建错误 E: List directory /var/lib/apt/lists/partial is missing.-Acquire (13: Permission denied)
  4. Liteide go: cannot find GOROOT directory
  5. 如何让json_encode不转义斜杠
  6. [PowerShell] PowerShell学习脚印
  7. signature=4abdf782f13579fc1b57d94a0c6ce95c,β-lactam-associated eosinophilic colitis
  8. 面向数据流的设计方法
  9. Jsonschema2pojo从JSON生成Java类(Maven)
  10. 叨叨20220304
  11. mysql update 顺序_MySQL的Update语句Set顺序问题
  12. Log4jx 2.9 后支持进程号输出
  13. 最流行前端开发框架对比评测
  14. 外贸公司用邮件开发客户需要注意些什么?
  15. 微信小程序零基础入门_第一章 小程序和开发者工具的介绍
  16. 软件工程导论第三章复习总结附思维导图
  17. 实现财务自由的重要工具
  18. 问一个sql方面的问题
  19. uboot通过u盘烧写linux内核,向Flash中烧写uboot和linux操作系统
  20. android 定位服务和wifi,android WIFI定位和基站定位实现

热门文章

  1. Linux下lt8911exb调试总结
  2. Appium定位H5方法 talkback(安卓版)
  3. LOTO 示波器软件功能 8位~13位垂直分辨率讲解
  4. 单目纯视觉避障方案——2020中国机器人大赛FIRA避障仿真组决赛代码开源
  5. 六招帮你推广网店知名度
  6. (三) 深度学习笔记 |关于梯度、导数、偏导数和方向导数的理解
  7. 【软件设计师07】程序设计语言与语言处理程序基础
  8. 汽车UDS诊断之读取DTC信息服务(0x19)深度剖析
  9. 解决phpstudy打开网页很慢的问题(网站响应速度慢)
  10. 你不可不知的二十三大隐藏较深的论坛!