我对Javascript闭包的理解
var tmd = function(){//这里我们叫做"匿名函数1"
var tmdNum = 0;
return function(){//这里我们叫做"匿名函数2”
//在这儿你可以随便写你想些的代码,我无所谓。
tmdNum ++;
alert(tmdNum);
}
}(); //千万要注意这里的这个小括号。
这段代码什么意思呢?
第一步:先把函数里面的内容都删了,看总体的结构
var tmd = function(){}();
这行代码的意思是 先声明一个变量,变量的名字叫做tmd。
function(){} 这是声明了一个匿名函数
function(){}(); 加个括号的意思是让这个匿名函数立即执行。
所以,tmd的值就是这个匿名函数的返回值。如果这个函数什么也不返回,tmd的值就是undefined。
第二步:看匿名函数里面的内容
匿名函数里面有做了两件事情
一是定义了一个变量tmdNum,并赋初值为0;
二是执行一个return,return function(){} 表示返回的是一个函数。这个函数的函数体执行的步骤跟我们文章一开始写的那个tmd函数的执行步骤是一样的。
结果:我们折腾了这么一大圈,达到的目的是什么呢。首先,匿名函数1 return了一个函数(匿名函数2)赋给了tmd变量。这样调用tmd(),实际调用的就是匿名函数2。因为tmdNum这个变量只能被匿名函数2调用,所以最终的效果就是tmdNum这个变量只能在tmd()调用的时候改变。
分享到:
相关推荐
本文将从JavaScript权威指南出发,深入探讨变量作用域的相关知识点,包括全局作用域、局部作用域、以及闭包等高级概念。 #### 二、全局作用域与局部作用域 1. **全局作用域** - 定义:在JavaScript中,如果一个...
基于JavaScript的变量作用域的辨析 本文探讨了JavaScript中的变量作用域问题,通过对两种变量的特性从不同角度进行分析和测试,讨论了如何控制变量作用域的有效方法。 变量作用域是JavaScript编程过程中经常遇到的...
本文将深入探讨JavaScript中的变量作用域,以及它如何影响代码的运行和组织。 首先,我们来理解什么是变量作用域。在JavaScript中,变量作用域决定了变量在何处可以被访问和识别。主要有三种类型的作用域:全局作用...
### JS的作用域与闭包 #### 一、作用域的基础概念 作用域是JavaScript中一个非常核心的概念,它定义了变量的可见性和生命周期。在学习作用域之前,我们需要先了解几个基本概念: - **变量**: 在JavaScript中,...
在JavaScript中,闭包(Closure)是一个非常重要的概念,它允许一个函数访问并操作其外部作用域中的变量,即使该函数在其外部作用域之外被调用。这种特性使得闭包成为一种强大的工具,能够实现诸如数据封装、私有...
本文实例讲述了JavaScript闭包与作用域链。分享给大家供大家参考,具体如下: 闭包定义 闭包指的是有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式,就是在一个函数A内部创建另一个函数B,那么函数B...
JavaScript中的闭包、匿名函数和作用域链是编程中至关重要的概念,它们是理解JavaScript运行机制的关键。在本文中,我们将深入探讨这三个概念,并通过实际示例来展示它们的运用。 首先,我们来讨论“闭包”。闭包是...
在JavaScript中,作用域定义了变量的可见性和生命周期,而闭包则是一种特殊的内部函数,它可以访问并操作外部函数的变量,即使外部函数已经执行完毕。 **作用域** 1. **全局作用域**:在所有函数外部定义的变量...
"作用域链和闭包:代码中出现相同的变量,JavaScript引擎是如何选择的?" 标题“作用域链和闭包:代码中出现相同的变量,JavaScript引擎是如何选择的?”中,我们可以看到JavaScript引擎是如何选择相同的变量的。...
6. **闭包作用域**:在函数内部定义的函数(闭包)可以访问其外部函数的变量,即使外部函数已经执行完毕。这种特性在JavaScript等语言中常见,有助于实现数据隐藏和封装。 了解对象的作用域对于编写高效、安全的...
JavaScript中的闭包是一种高级编程概念,它涉及到函数和作用域的相互作用,使得函数能够访问并操作其外部作用域中的变量,即使在其外部作用域已经结束之后。闭包是JavaScript中实现数据隐藏和封装的一种重要手段,...
JavaScript中的闭包是一种强大的特性,它允许函数访问和修改外部函数的作用域中的变量,即使外部函数已经执行完毕。由于JavaScript不支持块级作用域(如C++或Java中的`{}`),开发者通常利用闭包来模拟块级作用域的...
JavaScript中的变量作用域和闭包是其核心特性之一,它们对程序的设计和运行方式有着深远的影响。首先,我们来看看变量作用域。在JavaScript中,作用域决定了变量和函数的可访问性。变量作用域的划分主要有两种:全局...
2. **作用域的详解**:解释不同类型的变量作用域,如全局作用域、局部作用域和块级作用域,并通过实例展示作用域规则。 3. **闭包的原理**:解释什么是闭包,如何创建闭包,以及闭包如何保持对外部变量的引用。 4....
JavaScript作用域是编程中至关重要的...在实际编程中,我们还会遇到闭包、块级作用域(ES6中的`let`和`const`)等更高级的概念,这些都是基于作用域链的扩展,理解它们对于成为精通JavaScript的开发者来说必不可少。
JavaScript中的闭包是一种强大的特性,它允许函数访问并操作其外部作用域的变量,即使在函数执行完毕后这些变量仍然存在。这个特性使得闭包在处理数据隐私、模块化和记忆化等方面非常有用。让我们深入探讨一下闭包的...
变量作用域决定了变量在何处可以被访问。主要有以下几种类型的作用域: 1. **全局作用域**:在所有函数外部定义的变量拥有全局作用域,它们在整个程序中都可访问。例如: ```python x = 10 def print_x(): print...
在JavaScript中,闭包(Closure)是一个极其关键的概念,它使得内部函数能够访问到其外部函数的作用域内的变量,即使外部函数已经执行完毕。这一特性是基于JavaScript的函数作用域规则以及函数本身可以作为值进行...