作为一个初学者如何简单地理解闭包

闭包最直接的定义:函数可以记住并访问所在的词法作用域时,就产生了闭包,即使这个函数是在当前词法作用域之外执行的。
如下代码:

function foo() {
  var a = 1;
  function bar() {
    console.log(a);
  }
  bar();
}

foo(); // 1

kyle给的一个定义,首先给人的第一感觉就是,这不就是在说作用域的查找规则吗?因为就算一个初学者不懂闭包,依然能理解这种结果,原因很简单,因为bar函数是嵌套在foo函数中。确切来说,这并不算是闭包。这种作用域的查找规则只是闭包的一部分。

真正的闭包应该像下面的代码一样:

function foo() {
  var a = 1;
  function bar() {
    console.log(a);
  }
  return bar;
}

let baz = foo();
baz(); // 1
// 嗨,这就是闭包的威力

原文地址:https://www.cnblogs.com/wljqds/p/11279792.html

时间: 2024-10-08 04:18:53

作为一个初学者如何简单地理解闭包的相关文章

JavaScript——以简单的方式理解闭包

闭包,在一开始接触JavaScript的时候就听说过.首先明确一点,它理解起来确实不复杂,而且它也非常好用.那我们去理解闭包之前,要有什么基础呢?我个人认为最重要的便是作用域(lexical scope),如果对作用域和作用域链不理解的同学最好自己先去学一学,再回过头来,理解闭包,就更加轻松. 下面便直接进入主题. 我们知道一个函数是有作用域的,在函数内部定义的局部变量只有在函数内部才可以访问的到.一旦函数访问结束被销毁,局部变量随之也会销毁,无法通过任何方式再次访问局部变量,除了闭包.也就是说

简单理解闭包

对于闭包,我也是一直在用,特别是在做项目的时候,下面就简单讲一下闭包 讲到闭包就必然要讲到作用域,我们都知道在JavaScript中,变量的作用域是由它所在原代码中的位置决定的,并且嵌套的函数可以访问到它外面的变量 function init(){ var name = "rongyang"; function displayname(){ alert(name); } displayname(); } init(); 还有一点就是,在函数的内部可以调用外部的函数,而在外部却无法访问函

一个小例子对多态简单的理解

class Parent{ int age; String name; public Parent(String name, int age){ this.name = name; this.age = age; } public void writeWay(){ System.out.println("毛笔!"); } } class Child extends Parent{ int age; String name;//这里只说为了说明一个问题,其实完全可以有父类继承而来. pu

JS 理解闭包

闭包是js的一个难点,许多高级应用都需要用闭包实现.要理解闭包,首先必须理解Javascript特殊的变量作用域,其次是垃圾回收机制. 一.理解变量作用域 ①  变量分为全局变量和局部变量,在函数内部可以直接读取全局变量,如: var a = 100; function x1(){ alert(a); } x1();  //得到 100 而在函数外部,自然无法读取函数内部的局部变量,如: function x1(){ var a = 100; } alert(a);//error ps:如果在函

javascript深入理解闭包

一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量. Js代码 var n=999; function f1(){ alert(n); } f1(); // 999 另一方面,在函数外部自然无法读取函数内的局部变量. Js代码 function f1(){ var n=999; } alert(n); // error 这里有一个地方需要注意,函数

js深入理解"闭包"

一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量. Js代码 var n=999; function f1(){ alert(n); } f1(); // 999 另一方面,在函数外部自然无法读取函数内的局部变量. Js代码 function f1(){ var n=999; } alert(n); // error 这里有一个地方需要注意,函数

JavaScript要理解闭包先了解词法作用域

之所以取名叫做词法作用域,是这个概念是js中相当基础也是极为重要的,很多想当然的错误或感觉怪异的问题都是和这个东西有关.所以,本文主要说下这个名词的概念以及讨论下他牵扯出来的有关变量.函数.闭包的问题. 由变量开始谈 习惯性先来段代码: view source print? 1 var x = "globol value"; 2 var getValue = function() 3 { 4     alert(x);    //弹出"undefined" 5   

一个初学者的指南,使用D3做数据绑定

一个初学者的指南,使用D3做数据绑定 D3.js 是个强大的数据可视化库,可以做出惊艳的图表.比如:气泡图,线图和条形图--只需要很少行的代码 随着初学者对JavaScript的理解,可以将数组或者对象转换成一个五彩缤纷的显示效果.然而,每一个初学者的比较纠结的是一开始理解如何将数据绑定在实际的DOM元素上.这就是我们所知道的“数据绑定”或者叫“数据连接”.这是一个重要的处理,因为这个整个过程的第一步! 非常直观的,你可能希望使用一个 for() 循环,循环每一项数据并且创建一个元素,像这样:

感觉Java写一个窗口真心简单,很易上手

上学期学习了Java ,感觉Java写一个窗口真心简单,很易上手,也就难怪很多开发人员选择Java作为自己的开发编程语言.但是由于自身对windows的热爱,让我觉得c.c++语言才是我亲睐的编程语言,虽然难度大些,但是这才能体现能力所在.其实之前一直想自学一下win32,但是由于时间的显示和种种原因而耽搁了,于是今年暑假决心深入学习win32. 在学习过程中呢,我会在此留下自己的学习心得,当做自己的笔记.初学者可以借鉴,高手可以多多指教,呵呵…… 好了,今天开始做第一课的笔记吧: 学习Win3