js匿名函数自执行的好处
我们知道,在创建一个函数时如果要用到变量来存取信息的话,要尽量使用局部变量。
因为一方面局部变量会随着函数的执行结束被销毁;另一方面在不执行函数的时候也不会创建这个局部变量,对节省空间资源有很大的好处。
下面我们来看一个案例:
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
但是,这种方法也有弊端。
- 如果函数demo不执行,就无法获取函数a、函数b、变量num。
- demo也是一个全局变量。也就是说我们虽然没有定义全局变量num,却又定义了一个全局变量demo。显然这并没有达到我们最初的目的。
- 每次调用函数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匿名函数自执行的好处的更多相关文章
- JS匿名函数自执行函数
JS匿名函数自执行函数:(function(){})();(function(){}) 这是一个函数,函数后面接(),则是调用函数 比如(function(arg){console.log(arg); ...
- JS 匿名函数 自执行
其实就是将函数直接做为表达调用,使用括号包裹定义函数体,解析器将会以函数表达式的方式去调用定义函数. 常见格式:(function() { /* code */ })(); 解释:包围函数(funct ...
- js 匿名函数立即执行问题
js立即执行函数写法理解 这篇真的写得很清楚了,不光括号可以将函数声明转换成函数表达式然后立即执行,!,+,-,=也都可以转换,但是可能会带来意外的结果,因此一般都用括号实现. 还有关于for (va ...
- js匿名函数确实是个好东西
<body onload="alert('http://www.baidu.com/');"> <script type="text/javascrip ...
- JS中的匿名函数自执行、函数声明与函数表达式
先看一段jQuery源码中匿名函数自执行的例子: (function( window, undefined ) { // jquery code })(window); 另外一种常见的写法: +fun ...
- JS 匿名函数或自执行函数总结
JS引擎在遇到function关键字时做如下两种处理: 1.当语句是以function关键字开头:此时的JS语句解释为函数声明,因此function关键字后面必须要跟函数名字,如果写成匿名函数,则会报 ...
- 匿名函数自执行原理和instanceof运算符执行原理
今天收到RSS订阅中有一篇<Javascript – Arraylike的7种实现>,看第一种实现方式是,瞬间被!function(){}()这种匿名函数自执行方式给亮瞎了眼睛.这种写法绝 ...
- jQuery源码,匿名函数自执行
jQuery框架的首尾是这样写的()(), (function(window){//这个window是个入参,随便起个名字都行 //这里面全都是js代码 })(window)//这个括号里的windo ...
- js匿名函数和闭包总结
js匿名函数和闭包总结 一.总结 一句话总结:匿名函数的最主要作用是创建闭包,闭包就是将函数内部和函数外部连接起来的一座桥梁.内层的函数可以使用外层函数的所有变量,即使外层函数已经执行完毕.闭包可以用 ...
随机推荐
- codeforces 733D Kostya the Sculptor(贪心)
Kostya is a genial sculptor, he has an idea: to carve a marble sculpture in the shape of a sphere. K ...
- Atcoder D - A or...or B Problem(思维)
题目链接:http://agc015.contest.atcoder.jp/tasks/agc015_d 题意:给出两个数b,a(a>=b)问{a,a+1,....,b}的集合内取任意数求或运算 ...
- 前端利器躬行记(4)——webpack进阶
webpack是一个非常强大的工具,除了前文所介绍的基础概念之外,还有各种进阶应用,例如Source Map.模块热替换.集成等,本文会对这些内容做依次讲解. 一. runtime和manifest ...
- Caused by: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: No serializer found for class org.apache.catalina.connector.CoyoteWriter and no properties discovered to create BeanSerializer
一.什么是序列化In computer science, in the context of data storage, serialization is the process of transla ...
- BigDecimal转String
代码: public static void main(String[] args) { // 浮点数的打印 System.out.println(new BigDecimal("10000 ...
- 基础知识:CSRF漏洞
CSRF漏洞概述 CSRF漏洞是跨站请求伪造攻击,能够对攻击用户的增.删.改,不能攻击查.为什么呢?根据其原理,攻击者是发一个链接给用户,用户点击这个链接而执行危险的操作,信息并不会返回到攻击者的电脑 ...
- Linux下Eclipse以及Java环境安装教程[小白化](2019-9)
Linux下安装Eclipse以及Java 一.前言 许久未用Eclipse, Ubuntu上也没装Eclipse, 今天安装发现, 好多东西都忘了. 不过经过一番查找(百度, csdn) 终于还是安 ...
- SpringAop实现公共字段填充
一.说明 项目中经常会有一些放在缓存中的公共字段需要进行填充,我们知道mybatis-plus很方便地可以实现公共字段填充.在这里我定义了一个字段填充的注解,当我们需要进行数据填充的时候只要在方法上打 ...
- 字符串转化成int
将str转化成int #include<stdio.h> #include<string> int err = 0; int str_to_int(char *s) { lon ...
- vs code: 将VS code添加至右键
解决问题:一般安装完vs code后,系统可能不会将其添加至右键等菜单上,不便于开发. 解决方案: 百度上有一些相关问题的解决办法,但是还是会遇到一些问题,以下面为例: 1.新建一个reg后缀的文件 ...