JavaScript的函数表达式
一、定义函数的方式:
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的函数表达式相关推荐
- 一文探索 JavaScript 最强大特性—函数表达式
函数是 ECMAScript 中最有意思的部分之一,这主要是因为函数实际上是对象.每个函数都是 Function 类型的实例,而 Function 也有属性和方法,跟其他引用类型一样.因为函数是对象, ...
- JavaScript 函数声明,函数表达式,匿名函数,立即执行函数之区别
函数声明:function fnName () {-};使用function关键字声明一个函数,再指定一个函数名,叫函数声明. 函数表达式 var fnName = function () {-};使 ...
- 深入理解JavaScript系列(2):揭秘命名函数表达式(转)
前言 网上还没用发现有人对命名函数表达式进去重复深入的讨论,正因为如此,网上出现了各种各样的误解,本文将从原理和实践两个方面来探讨JavaScript关于命名函数表达式的优缺点. 简 单的说,命名函数 ...
- 深入理解JavaScript系列(4):立即调用的函数表达式
前言 大家学JavaScript的时候,经常遇到自执行匿名函数的代码,今天我们主要就来想想说一下自执行. 在详细了解这个之前,我们来谈了解一下"自执行"这个叫法,本文对这个功能的叫 ...
- Javascript 函数声明和函数表达式的区别
2019独角兽企业重金招聘Python工程师标准>>> Javascript Function无处不在,而且功能强大!通过Javascript函数可以让JS具有面向对象的一些特征,实 ...
- js调用php函数兵每秒刷新,深入理解JavaScript立即调用函数表达式(IIFE)
立即调用函数 目录一.了解立即调用函数表达式 二.立即调用函数表达式报错了? 三.使用立即调用函数的正确姿势 四.常见使用场景 写在最后 一.了解立即调用函数表达式 1.1 思维导图 1.2 什么是立 ...
- JavaScript程序开发(十四)—函数声明与函数表达式
函数声明和函数表达式虽然都是在声明一个函数,但是二者有区别,解析器对二者的解析并非是一视同仁的.解析器会率先解析读取函数声明,并使其可以在执行任何代码前可用(可以访问):至于函数表达式,则必须等到解析 ...
- JavaScript的函数声明与函数表达式的区别
1)函数声明(Function Declaration); // 函数声明function funDeclaration(type){return type==="Declaration&q ...
- JavaScript中的函数表达式
在JavaScript中,函数是个非常重要的对象,函数通常有三种表现形式:函数声明,函数表达式和函数构造器创建的函数. 本文中主要看看函数表达式及其相关的知识点. 函数表达式 首先,看看函数表达式的表 ...
最新文章
- Task04:青少年软件编程(Python)等级考试模拟卷(一级)
- php里面执行python,在php中执行python
- docker 构建错误 E: List directory /var/lib/apt/lists/partial is missing.-Acquire (13: Permission denied)
- Liteide go: cannot find GOROOT directory
- 如何让json_encode不转义斜杠
- [PowerShell] PowerShell学习脚印
- signature=4abdf782f13579fc1b57d94a0c6ce95c,β-lactam-associated eosinophilic colitis
- 面向数据流的设计方法
- Jsonschema2pojo从JSON生成Java类(Maven)
- 叨叨20220304
- mysql update 顺序_MySQL的Update语句Set顺序问题
- Log4jx 2.9 后支持进程号输出
- 最流行前端开发框架对比评测
- 外贸公司用邮件开发客户需要注意些什么?
- 微信小程序零基础入门_第一章 小程序和开发者工具的介绍
- 软件工程导论第三章复习总结附思维导图
- 实现财务自由的重要工具
- 问一个sql方面的问题
- uboot通过u盘烧写linux内核,向Flash中烧写uboot和linux操作系统
- android 定位服务和wifi,android WIFI定位和基站定位实现