文档章节

自执行函数

路是实践出来的
 路是实践出来的
发布于 2017/04/25 11:11
字数 496
阅读 4
收藏 0

1、函数声明、函数表达式、匿名函数

针对函数声明:function fnname()使用function关键字声明一个函数,再指定一个函数名。叫做函数声明

函数表达式 var fnname=function(){},使用function关键字声明一个函数,但没有给函数命名,最后将匿名函数赋予一个变量。叫做函数表达式,这是最常见的函数表达式语法形式。

函数声明和函数表达式不同之处在于,一、Javascript引擎在解析javascript代码时会‘函数声明提升'(Function declaration Hoisting)当前执行环境(作用域)上的函数声明,而函数表达式必须等到Javascirtp引擎执行到它所在行时,才会从上而下一行一行地解析函数表达式,二、函数表达式后面可以加括号立即调用该函数,函数声明不可以,只能以fnName()形式调用 。以下是两者差别的两个例子。

复制代码 代码如下:
fnName();
function fnName(){
    ...
}
//正常,因为‘提升'了函数声明,函数调用可在函数声明之前
fnName();
var fnName=function(){
    ...
}
//报错,变量fnName还未保存对函数的引用,函数调用必须在函数表达式之后

在函数体后面加括号可以实现立即调用,这个函数必须是函数表达式

只有var fname=function(){}()可以进行立即执行

function fname(){}()不会报错,但是只会解析函数声明,不会进行直接调用。

function(){}()//语法错误,虽然匿名函数属于函数表达式,但是没有进行赋值

优点:

可以将自己的业务数据封装到一个容器之中。容器内部可以访问外部的变量,而外部环境不能

访问容器内部的变量。因此 内部定义的变量不会和外部变量发生冲突。俗称“匿名包裹器”或者“命名空间”

© 著作权归作者所有

共有 人打赏支持
路是实践出来的
粉丝 2
博文 29
码字总数 9482
作品 0
西安
私信 提问
python笔记day5

http://www.cnblogs.com/wupeiqi/articles/4938499.html python解释器执行顺序:从上到下 def foo(): -->将foo函数读入内存,但不执行函数体内容 print 'abc' -->略过这行 foo -->表示foo函数......

carrick_ma
2017/07/23
0
0
JS函数式编程中compose的实现

有以下需求: 创建一个compose函数,返回函数集 functions 组合后的复合函数, 也就是一个函数执行完之后把返回的结果再作为参数赋给下一个函数来执行. 以此类推. 在数学里, 把函数 f(), g(), ...

_Dot大师兄
2017/11/08
0
0
【译】理解JavaScript闭包——新手指南

闭包是JavaScript中一个基本的概念,每个JavaScript开发者都应该知道和理解的。然而,很多新手JavaScript开发者对这个概念还是很困惑的。 正确理解闭包可以帮助你写出更好、更高效、简洁的代...

LINJIAJUN
11/28
0
0
Learn Python3:装饰器

一、理解装饰器 通俗点说,当我们想给一个函数增强额外的功能,但又不想修改原函数的定义,同时新增的功能其它函数可能也需要使用,装饰器就是来解决这种需求的,将与原函数功能无关的代码提...

Othershe
2017/11/06
0
0
NsObject的load和initialize方法

load--当类被引用进程序的时候会执行这个函数。 当父类和子类都实现load函数时,父类的load函数会被先执行。load函数是系统自动加载的,因此不需要调用父类的load函数,否则父类的load函数会...

Redding
2014/04/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

git reset放弃修改&放弃增加文件

1. 本地修改了一堆文件(并没有使用git add到暂存区),想放弃修改。 单个文件/文件夹: $ git checkout -- filename 所有文件/文件夹: $ git checkout . 2. 本地新增了一堆文件(并没有git a...

JamesView
9分钟前
0
0
UnaryOperator函数式接口

这是一个函数式接口,因此可以用作lambda表达式或方法引用的赋值目标。 可以看到UnaryOperator<T>继承了Function<T,T>接口,这里可是两个T,T,还增加了static修饰的identity()方法。 然后我们...

woshixin
9分钟前
0
0
关于java包装类型的缓存

除了Float 和 Double 外,其他包装数据类型都会缓存 -128 ~127 的值,对于 Integer var = ? 在 -127~128 之间的赋值,Integer 对像由IntegerCache.cache 产生,会复用已有对像,这个区间内的...

Canaan_
12分钟前
1
0
mysql复合主键

表: CREATE TABLE `w_test` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, PRIMARY KEY (`id`,`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 实践: 1、添加i......

shikamaru
13分钟前
0
0
记一下自己理解的SSL

步骤 操作 客户端钥匙(随机数)数量 服务端钥匙(随机数)数量 1 客户端生成一把钥匙, 发给服务器 1 0 2 服务器确认支持 1 1 3 服务器 生成一把钥匙 发给客户端,并且把公钥(证书)给他 ...

Gavin-King
16分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部