JavaScript中的自执行函数和闭包实现过程
在JS中,也常常需要复用,将一些常见的操作封装起来,目前看到的很多JS库,比如JQuery就是非常典型的,那么如何在JS中写一个可复用的呢?虽然在JS中有类的这个说法,但是我对这个玩意还是很抵触的,但是存在即合理。JS中的类是通过函数来模拟的,也就是说JS中的函数具有双重角色,用new关键字的将函数视为类,不用new的,它就是一个普普通通的函数。
我们知道,类就是一个数据类型,这个数据类型由属性和方法(函数)组成,如果函数只有属性,没有方法,那么这样的类,一般就单纯的表示为一个数据,增加上一些方法,那么类的功能将会有质的变化。既然在JS中,函数可以表示为类,而类中又有方法,那么在JS中函数内部新定义一个函数,也就不足为怪。
JS中最为强大的内容,我认为除了原型,就是闭包,这里就讨论闭包,闭包其实就是在一个函数内部定义一个新的函数,在执行的时候,会将这个函数返回,也可能是返回一个对象。下面就是一个简单的闭包:
var MathTest = function (x, y) {var x = x;var y = y;var add = function () {return x + y;}return add;}
var x = MathTest(3, 4);alert(x());
在执行的时候MathTest就是内部的add函数,调用MathTest的时候,相当于执行了x+y,这其实并不起卦,可以将add认为是function内部的一个变量,只是这个变量的值是一个函数,内部的函数是可以访问它的上一个级别的数据,所以我们可以得到正确的值。
所谓匿名函数就是没有名字的函数,形式如下:
function () {}
既然没有名字,那么如何调用呢:
var b=function () {} b()
可以将匿名函数付给一个变量,这个变量现在就充当了这个函数的名称,但是记住,这个不是名称,我只是这么叫,如果觉得不妥的话,可以认为b现在就是这个匿名函数的代表,在用的时候用b就等同于使用右边的函数。除了这种方式,还有就是自执行函数,形式如下:
(function(){//代码})();
自执行函数相当于我们上面两步的结合:
var b=function () {} b()
js自执行函数的几种不同写法的比较
(function(){alert(1);}());
这是jslint推荐的写法,好处是,能提醒阅读代码的人,这段代码是一个整体。
例如,在有语法高亮匹配功能的编辑器里,光标在第一个左括号后时,最后一个右括号也会高亮,看代码的人一眼就可以看到这个整体。
不过,对于某些写代码不喜欢在行后加分号的同学,也会形成一些坑坑,例如以下代码会报运行错:
var a=1
(function(){alert(1);}());
方法2:function外面加括号
(function(){alert(1);})();
这种做法比方法1少了一个代码整体性的好处。
方法3:function前面加运算符,常见的是!与void 。
!function(){alert(1);}();
void function(){alert(2);}();
显然,加上“!”或“+”等运算符,写起来是最简单的。
加上“void ”要敲五下键盘,但是听说有一个好处是,比加"!"少一次逻辑运算。----我只是听说,不明所以。
JavaScript中的自执行函数和闭包实现过程相关推荐
- JavaScript中的立即执行函数
原文链接 通常我们声明一个函数有以下几种方式: // 声明函数f1 function f1() {console.log("f1"); } // 通过()来调用此函数 f1();/ ...
- 深入理解javascript中的立即执行函数(function(){…})()
2019独角兽企业重金招聘Python工程师标准>>> javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各 ...
- js中(function(){…})()立即执行函数写法理解
js中(function(){-})()立即执行函数写法理解 javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法 ...
- 立即执行函数解决闭包问题
立即执行函数解决闭包问题 立即执行函数的定义 定义 : 此类的函数没有声明,在一次执行过后释放(被销毁),适合做初始化工作,针对初始化功能的函数,只想让他执行一次的函数,立即执行函数也有参数,也有返回 ...
- 匿名自执行函数是闭包吗?
匿名函数与闭包函数应该是不一样的,我看到网上很多人把匿名自执行函数当做闭包,我认为这是不对的, 闭包定义: 闭包是在一个函数中可以访问另外一个函数的作用域 闭包: function fun ...
- JavaScript 自执行函数(闭包)
1. 全局污染 在变量声明的时候有一个规则:重复声明无效 var num = 123; var num = 'abc'; 重复声明的代码不会报任何错误,但是其声明特征就没有了,会转换成普通赋值语句 故 ...
- JS作用域、立即执行函数、闭包
作用域 首先先介绍一下作用域等一些基础概念. 每个JavaScript函数都是一个对象,对象中有些属性我们可以访问,但有些不可以,这些属性仅供JavaScript引擎存取,[[scope]]就是其中一 ...
- JavaScript中的一等公民: 函数(Function)
1. 函数的基本使用 使用函数声明或者函数表达式创建一个函数 foo(); //foo bar(); //Uncaught ReferenceError: Cannot access 'bar' be ...
- ES5-7 立即执行函数、闭包深入、逗号运算符
1. 立即执行函数 定义在全局的函数只有关闭浏览器或者退出程序才会释放 IIFE: Immediately-Invoked Function Expression 解决页面加载自动执行,执行完成后立即 ...
最新文章
- 循环训练_力量循环训练
- [leetcode] 101. 对称二叉树
- python 字符串拼接_Python字符串拼接的6种方法(转)
- TCP三次握手及关闭时的2MSL分析
- 本文可能是国内第一篇介绍C/4HANA Foundation的中文博客
- mysql索引有哪些了解_Mysql索引(简单了解)
- 使用bootstrap-table插件
- input el-input 打印是取不到值 print()
- 数据可视化—如何利用R,制作DashBoard
- mysql安装包及驱动下载
- 冒险岛如何修改服务器wz,冒险岛怎么WZ修改攻击力说好了加100分
- EVEREST - 测试软硬件系统信息的工具
- ffmpeg gif拆分成多张jpg
- 支付宝——手机网站支付接口研究
- 对比excel,轻松学习python数据分析(读书笔记1-3章)
- 计算机制作幻灯片视频教程,如何在电脑上制作幻灯片?
- 计算机word平均分怎么算,word怎么计算一列平均分
- iOS 开发值得拥有的75 个工具
- 用ps帧动画整个放置身份证示意图
- MP4 全介绍【转载】
热门文章
- 微信小程序实现生成分享海报案例
- Android--判断APP是否运行
- 打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方
- Ubuntu 给用户添加sudo权限
- Ubuntu下添加用户到指定用户组
- 一款超好用的 Redis 可视化管理工具
- 搭建专业商用WIFI热点
- java pdf stamper_java 通过pdf模板,生成PDF,并下载到本地-Go语言中文社区
- 为什么多数程序员对黑色的界面情有独钟?网友调侃:黑科技般的黑
- XDOJ - 最大公约数最小公倍数