在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自执行函数的几种不同写法的比较

方法1:最前最后加括号

复制代码代码如下:

(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中的自执行函数和闭包实现过程相关推荐

  1. JavaScript中的立即执行函数

    原文链接 通常我们声明一个函数有以下几种方式: // 声明函数f1 function f1() {console.log("f1"); } // 通过()来调用此函数 f1();/ ...

  2. 深入理解javascript中的立即执行函数(function(){…})()

    2019独角兽企业重金招聘Python工程师标准>>> javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各 ...

  3. js中(function(){…})()立即执行函数写法理解

    js中(function(){-})()立即执行函数写法理解 javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法 ...

  4. 立即执行函数解决闭包问题

    立即执行函数解决闭包问题 立即执行函数的定义 定义 : 此类的函数没有声明,在一次执行过后释放(被销毁),适合做初始化工作,针对初始化功能的函数,只想让他执行一次的函数,立即执行函数也有参数,也有返回 ...

  5. 匿名自执行函数是闭包吗?

    匿名函数与闭包函数应该是不一样的,我看到网上很多人把匿名自执行函数当做闭包,我认为这是不对的, 闭包定义: 闭包是在一个函数中可以访问另外一个函数的作用域   闭包:    function  fun ...

  6. JavaScript 自执行函数(闭包)

    1. 全局污染 在变量声明的时候有一个规则:重复声明无效 var num = 123; var num = 'abc'; 重复声明的代码不会报任何错误,但是其声明特征就没有了,会转换成普通赋值语句 故 ...

  7. JS作用域、立即执行函数、闭包

    作用域 首先先介绍一下作用域等一些基础概念. 每个JavaScript函数都是一个对象,对象中有些属性我们可以访问,但有些不可以,这些属性仅供JavaScript引擎存取,[[scope]]就是其中一 ...

  8. JavaScript中的一等公民: 函数(Function)

    1. 函数的基本使用 使用函数声明或者函数表达式创建一个函数 foo(); //foo bar(); //Uncaught ReferenceError: Cannot access 'bar' be ...

  9. ES5-7 立即执行函数、闭包深入、逗号运算符

    1. 立即执行函数 定义在全局的函数只有关闭浏览器或者退出程序才会释放 IIFE: Immediately-Invoked Function Expression 解决页面加载自动执行,执行完成后立即 ...

最新文章

  1. 循环训练_力量循环训练
  2. [leetcode] 101. 对称二叉树
  3. python 字符串拼接_Python字符串拼接的6种方法(转)
  4. TCP三次握手及关闭时的2MSL分析
  5. 本文可能是国内第一篇介绍C/4HANA Foundation的中文博客
  6. mysql索引有哪些了解_Mysql索引(简单了解)
  7. 使用bootstrap-table插件
  8. input el-input 打印是取不到值 print()
  9. 数据可视化—如何利用R,制作DashBoard
  10. mysql安装包及驱动下载
  11. 冒险岛如何修改服务器wz,冒险岛怎么WZ修改攻击力说好了加100分
  12. EVEREST - 测试软硬件系统信息的工具
  13. ffmpeg gif拆分成多张jpg
  14. 支付宝——手机网站支付接口研究
  15. 对比excel,轻松学习python数据分析(读书笔记1-3章)
  16. 计算机制作幻灯片视频教程,如何在电脑上制作幻灯片?
  17. 计算机word平均分怎么算,word怎么计算一列平均分
  18. iOS 开发值得拥有的75 个工具
  19. 用ps帧动画整个放置身份证示意图
  20. MP4 全介绍【转载】

热门文章

  1. 微信小程序实现生成分享海报案例
  2. Android--判断APP是否运行
  3. 打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方
  4. Ubuntu 给用户添加sudo权限
  5. Ubuntu下添加用户到指定用户组
  6. 一款超好用的 Redis 可视化管理工具
  7. 搭建专业商用WIFI热点
  8. java pdf stamper_java 通过pdf模板,生成PDF,并下载到本地-Go语言中文社区
  9. 为什么多数程序员对黑色的界面情有独钟?网友调侃:黑科技般的黑
  10. XDOJ - 最大公约数最小公倍数