我们知道,在创建一个函数时如果要用到变量来存取信息的话,要尽量使用局部变量。

因为一方面局部变量会随着函数的执行结束被销毁;另一方面在不执行函数的时候也不会创建这个局部变量,对节省空间资源有很大的好处。

下面我们来看一个案例:

 var num = 1;          //全局变量num

 function a() {
console.log(num);
} function b() {
console.log(num);
} a();              //调用函数a,结果会在控制台打印1
b();              //调用函数b,结果会在控制台打印1

上面这个案例里的变量num就是一个典型的全局变量。

那么我们要怎么把num变成局部变量呢?

方法一:

 1 function a() {
2   var num = 1;
3   console.log(num); //打印1
4 } 6 function b() {
7   var num = 1;
8   console.log(num);
9 } 11 a(); //调用函数a,结果会在控制台打印1
12 b(); //调用函数b,结果会在控制台打印1

上面这种方法虽然解决了全局变量的问题,但是多次定义相同变量num。使得代码冗余,不够优化。这种方法不推荐

方法二:

 var demo = function () {
var num = 1; function a() {
console.log(num);
} function b() {
console.log(num);
} a(); //调用函数a,结果会在控制台打印1
b(); //调用函数b,结果会在控制台打印1
} demo(); //调用函数demo,获得函数a、函数b、变量num

上面这种方法二将num、函数a、函数b都写在一个demo函数里,这样就将变量num变成了一个局部变量,而且函数a和函数b也都可以访问到变量num

但是,这种方法也有弊端。

  1. 如果函数demo不执行,就无法获取函数a、函数b、变量num。
  2. demo也是一个全局变量。也就是说我们虽然没有定义全局变量num,却又定义了一个全局变量demo。显然这并没有达到我们最初的目的。
  3. 每次调用函数a和函数b之前都得先调用demo,这样会使代码冗余。万一我们哪次忘记调用demo了怎么办呢?

所以,这种也不推荐。

那我们该怎么办呢?==>匿名函数自执行

方法三:匿名函数自执行(推荐)

 1 (function () {
2   var num = 1;
3
4   function a() {
5     console.log(num);
6   }
7
8   function b() {
9     console.log(num);
10   }
11
12   a();
13   b();
14 })();

匿名函数自执行没有定义任何一个全局变量,我们也不用每次先调用外面的函数获取里面的内容。完美的解决了我们的需求。极力推荐。

写在后面:

什么是匿名函数?什么是函数自执行?匿名函数还有其他好的应用?或许我的其他博客https://www.cnblogs.com/CurryLi/ 可以帮到你哦,欢迎您的到来。

//调用函数a,结果会在控制台打印1

js匿名函数自执行的好处的更多相关文章

  1. JS匿名函数自执行函数

    JS匿名函数自执行函数:(function(){})();(function(){}) 这是一个函数,函数后面接(),则是调用函数 比如(function(arg){console.log(arg); ...

  2. JS 匿名函数 自执行

    其实就是将函数直接做为表达调用,使用括号包裹定义函数体,解析器将会以函数表达式的方式去调用定义函数. 常见格式:(function() { /* code */ })(); 解释:包围函数(funct ...

  3. js 匿名函数立即执行问题

    js立即执行函数写法理解 这篇真的写得很清楚了,不光括号可以将函数声明转换成函数表达式然后立即执行,!,+,-,=也都可以转换,但是可能会带来意外的结果,因此一般都用括号实现. 还有关于for (va ...

  4. js匿名函数确实是个好东西

    <body onload="alert('http://www.baidu.com/');"> <script type="text/javascrip ...

  5. JS中的匿名函数自执行、函数声明与函数表达式

    先看一段jQuery源码中匿名函数自执行的例子: (function( window, undefined ) { // jquery code })(window); 另外一种常见的写法: +fun ...

  6. JS 匿名函数或自执行函数总结

    JS引擎在遇到function关键字时做如下两种处理: 1.当语句是以function关键字开头:此时的JS语句解释为函数声明,因此function关键字后面必须要跟函数名字,如果写成匿名函数,则会报 ...

  7. 匿名函数自执行原理和instanceof运算符执行原理

    今天收到RSS订阅中有一篇<Javascript – Arraylike的7种实现>,看第一种实现方式是,瞬间被!function(){}()这种匿名函数自执行方式给亮瞎了眼睛.这种写法绝 ...

  8. jQuery源码,匿名函数自执行

    jQuery框架的首尾是这样写的()(), (function(window){//这个window是个入参,随便起个名字都行 //这里面全都是js代码 })(window)//这个括号里的windo ...

  9. js匿名函数和闭包总结

    js匿名函数和闭包总结 一.总结 一句话总结:匿名函数的最主要作用是创建闭包,闭包就是将函数内部和函数外部连接起来的一座桥梁.内层的函数可以使用外层函数的所有变量,即使外层函数已经执行完毕.闭包可以用 ...

随机推荐

  1. whu-contest-2019(online)

    比赛网址:http://whu2019.contest.codeforces.com/group/YyBKO8xFiH/contest/102167 赛后总结: T:今天参加了武汉大学校赛网络赛,在c ...

  2. 精品自用IDEA插件吐血推荐

    Alibaba Java Coding Guidelines 该插件集成了Alibaba代码编程规范,可以帮你找出你的代码怪味道 .gitignore 当你使用Git作为版本工具的时候,想要快速的添加 ...

  3. 适合C++のOIer平日写题的开场模板

    上面的#define还是较充足的,快读模板也有,freopen也提前打好了,比较适合OIer(C++)平时刷题和考试的开场. (纯原版仅供SJZEZのORZ队&AFO队使用) (您老把开头的注 ...

  4. XSS漏洞之加载远程js文件

    这次在对一个系统渗透测试过程中,发现一个XSS漏洞,可弹窗,并且没有httponly 但是在尝试加载远程js文件的时候发现,script标签被过滤掉了,准确的说应该是服务器后端在识别到输入内容有< ...

  5. 基于soot的java方法名生成报告

    0.生成XML格式文件 笔者使用soot将java文件解析生成xml格式文档,具体操作流程不再赘述.本文讨论执行结果的用途.笔者第一次采用的java文件如下:文件名为test.java 用soot解析 ...

  6. 2019年江苏高考数学真题LaTeX排版

    文档pdf中点击以下链接,可进行下载! https://hoganbin.top/post/2531000494/2019%E5%B9%B4%E6%B1%9F%E8%8B%8F%E9%AB%98%E8 ...

  7. rpyc + plumbum 实现远程调用执行shell脚本

    rpyc可以很方便实现远程方法调用, 而plumbum则可以实现在python中类似shell的方式编码: 具体实现代码如下: Server.py import rpyc from rpyc.util ...

  8. 用101000张食物图片实现图像识别(数据的获取与处理)-python-tensorflow框架

    前段时间,日剧<轮到你了>大火,作为程序员的我,看到了另外一个程序员—二阶堂,他的生活作息,以及饮食规律,让我感同身受,最让我感触的是他做的AI聊天机器人,AI菜品分析机器人,AI罪犯分析 ...

  9. 08 (OC)* 事件的传递和响应机制

    前言:苹果的官方文档<Event Handling Guide for iOS>对事件处理做了非常详尽清晰的解释,建议大家仔细研读 1. iOS中的事件介绍 2. 事件的产生和传递 3. ...

  10. [VB.NET Tips]字符串转换为日期

    有些字符串需要转换成日期,或者整型转换为日期,可以参考如下思路: Dim result As Date Dim source As String = "20190515" resu ...