引用:

1. JavaScript闭包_by runoob

2. JS中(function(){xxx})这么写是什么意思?

(一)闭包是可以访问上一层函数作用域里变量的函数,即便上一层函数已经关闭。闭包的目的在于:

1. 创建私有变量(局部变量),避免因使用全局变量而产生其他函数对变量的影响。

2. 支持嵌套函数影响和改变私有变量。

3. 支持外部调用该嵌套函数。

由于全局变量的作用域是整个JavaScript,反过来任何脚本和函数都能改变全局变量,容易造成不必要的麻烦。这时我们需要变量私有化(局部变量)。

而局部变量的局限性在于只有函数内部可以定义,页面调用函数时这个私有变量的值是固定的,而通常我们需要这个私有变量可以变化。

以下函数中,页面在调用add函数时counter变为1

 function add(){
var counter = 0;
function plus(){counter += 1;}
plus();
return counter;
}

通常我们希望页面能够调用add函数中的嵌套函数plus,使得变量counter的值可以累加。但嵌套函数无法在外部被调用。

(二)闭包 可以实现函数自我调用,通过闭包可以访问上一层作用域的函数,即便函数已经关闭。

 var add = (function ()
{
var counter = 0;
return function () { return counter += 1; }
})(); document.getElementById("demo").innerHTML = add();

变量add指定了函数自我调用的返回值(return counter+=1)

变量add可以作为一个函数使用,它可以访问上一层作用域的变量(当我们第二次调用add()时,此时counter=1,函数自我调用返回counter=2。)

此时counter成为私有变量受匿名函数的作用域保护,只能通过调用add()修改。闭包封装了一个函数,同时可以访问它的私有变量的值。

20180901 JavaScript闭包和匿名函数自动调用的更多相关文章

  1. JavaScript中的闭包和匿名函数

    JavaScript中的匿名函数及函数的闭包   1.匿名函数 2.闭包 3.举例 4.注意 1.匿名函数 函数是JavaScript中最灵活的一种对象,这里只是讲解其匿名函数的用途.匿名函数:就是没 ...

  2. [转]JavaScript中的匿名函数及函数的闭包

    JavaScript中的匿名函数及函数的闭包  原文地址:http://www.cnblogs.com/wl0000-03/p/6050108.html 1.匿名函数 函数是JavaScript中最灵 ...

  3. JavaScript中的匿名函数及函数的闭包(转)

    JavaScript中的匿名函数及函数的闭包  https://www.cnblogs.com/wl0000-03/p/6050108.html 1.匿名函数 函数是JavaScript中最灵活的一种 ...

  4. javascript匿名函数自调用

    // 匿名函数的自调用 /*var f1 = function() { console.log('我是一个匿名函数!'); }*/ // f1(); // 上面是定义一个匿名函数,然后调用,其实上面就 ...

  5. Javascript自执行匿名函数(function() { })()的原理浅析

    匿名函数就是没有函数名的函数.这篇文章主要介绍了Javascript自执行匿名函数(function() { })()的原理浅析的相关资料,需要的朋友可以参考下 函数是JavaScript中最灵活的一 ...

  6. 浅析PHP中的闭包和匿名函数

    PHP闭包和匿名函数使用的句法与普通函数相同,但闭包和匿名函数其实是伪装成函数的对象(Closure类的实例) .下面给大家介绍PHP中的闭包和匿名函数知识,需要的朋友参考下吧   闭包是指在创建时封 ...

  7. 闭包(匿名函数) php

    php中的闭包,之前不理解.以前项目中虽然有用到,也是别人怎么用,自己也跟着怎么用,也没具体去看一下,时间长了就忘了,也不知道闭包是怎么回事.今天网上搜集了关于php闭包相关的文章,看了7,8篇,干货 ...

  8. javascript(jquery)_匿名函数

    一.什么是匿名函数 匿名函数:就是没有函数名的函数 二.为什么使用匿名函数 1.最大的用处就是创建闭包 三.匿名函数定义(怎么使用匿名函数) 1.这种方法使用了Function构造函数,把参数列表和函 ...

  9. php 在 匿名函数中 调用自身。。

    //php闭包实现函数的自调用,也就是实现递归 function closure($n,$counter,$max){ //匿名函数,这里函数的参数加&符号是,引址调用参数自己 $fn = f ...

随机推荐

  1. 剑指Offer的学习笔记(C#篇)-- 数组中只出现一次的数字

    题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 题目给定:num1,num2分别为长度为1的数组.传出参数:将  num1[0], num2[0 ...

  2. jQuery EasyUI/TopJUI基本的数字输入框(保留两位小数,带前缀后缀...)

    jQuery EasyUI/TopJUI基本的数字输入框(保留两位小数,带前缀后缀...) numberbox(数值输入框) HTML required:必填字段,默认为false:prompt:显示 ...

  3. java.sql.SQLException: Could not commit with auto-commit set on

    This kind of exceptions occur when the Oracle JDBC Driver (ojdbc6.jar) version 12 or above will be u ...

  4. C# 文件异步操作

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  5. Luogu P2257 YY的GCD 莫比乌斯反演

    第一道莫比乌斯反演...$qwq$ 设$f(d)=\sum_{i=1}^n\sum_{j=1}^m[gcd(i,j)==d]$ $F(n)=\sum_{n|d}f(d)=\lfloor \frac{N ...

  6. Nginx功能介绍

    Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的. 从2004年发布至今,凭借开元的力量,已经接近成熟与完善. Nginx功能丰富,可作为HTTP服务器,也可作 ...

  7. WPF 模拟Button按钮事件触发

    this.Submit.AddHandler(Button.ClickEvent, new RoutedEventHandler(this.Submit_Click)); //这种是无效的方法 thi ...

  8. 用TextWriterTraceListener实现建议log文件记录

    log4net之类3方组件确实很方便,但是想写个小小的demo之类的程序,有点用不起啊. 微软自带的TraceListener要实现一个简易的日志帮助类还是很简单的,直接上代码,自己备用,也希望对同样 ...

  9. mysql 5.7.20 在线安装与卸载(yum卸载与rpm卸载方式)

    mysql5.7.20和之前的5.7.16版本不同,解压后没有data文件,需要自己建立 1.把下载的mysql5.7.20放到目录:/usr/local/2.卸载cenos上预装的mysql查看已安 ...

  10. 看动画,秒懂人工智能&物联网