`

浅谈javascript闭包1--英语水平不行,自己理解翻译

阅读更多

 

  首先说明下,本人学习的javascript师承--大漠。是我们群一个非常牛b的任务。

一下文章系列是从一个外文网站上面看到的,所以加上自己的理解就发出来,大家共同学习

下面是一个普通的javascript函数

function sayHello(name) {
  var text = 'Hello ' + name;//定义个临时string对象text
  var sayAlert = function() { alert(text); }//定义临时function对象sayAlert
  sayAlert();//执行
}
sayHello("Bob");//Bob

 一个简单的闭包实例

闭包其实可以用2句话来总结//但是有的技术员认为不是一定要返回的函数才是闭包,这个我后面会有例子上来

    第一:闭包是一个本地的函数变量,当调用它的函数返回的时候,它仍然是存在的,没有被释放。

    第二:闭包是一个堆栈当函数被返回的时候,该堆栈没有被释放。---闭包的重要作用,保存临时变量

  • 看下面的例子
function sayHello2(name) {
  var text = 'Hello ' + name; // local variable--本地变量是一个string对象
  var sayAlert = function() { alert(text); }
  return sayAlert;//闭包的标志,返回一个函数,该函数中text仍然是村在的
}
var say2=sayHello2('xx');//将返回的函数赋给say2
say2();//执行say2--其实就是执行sayAlert

再来看下面的这个例子

function say667() {
  // Local variable that ends up within closure
  var num = 666;
  var sayAlert = function() { alert(num); }

  num++;
 return sayAlert;
}


 

var sayNumba=say667();

sayNumba(); //弹出667

从上面这个例子我么可以看出,本地变量不是复制而是保持其引用在js引擎中,直到外部函数消失

下次,就写个闭包的常见引用吧,遍学习边用博客记录下来,方便自己

 

下面是我看到的一位技术牛人对闭包的看法

This is an attempt to clear up several (possible) misunderstandings about closures that appear in some of the other answers.

  • A closure is not only created when you return an inner function. In fact, the enclosing function does not need to return at all. You might instead assign your inner function to a variable in an outer scope, or pass it as an argument to another function where it could be used immediately. Therefore, the closure of the enclosing function probably already exists at the time that enclosing function was called since any inner function has access to it as soon as it is called.
  • A closure does not reference a copy of the old values of variables in its scope. The variables themselves are part of the closure, and so the value seen by accessing one of those variables is the latest value at the time it is accessed. This is why inner functions inside of loops can be tricky, since they all access the same outer variables.
  • The "variables" in a closure include named functions declared (at the top level) within the function. It also includes function arguments. The closure also has access to its containing closure's variables, all the way up to the global scope.
  • Closures use memory, but they don't cause memory leaks since JavaScript itself cleans up circular structures that have no references. IE memory leaks involving closures are caused by not disconnecting DOM attribute values that reference closures, thus maintaining references to possibly circular structures.

 

分享到:
评论

相关推荐

    浅谈JavaScript for循环 闭包_.docx

    浅谈JavaScript for循环闭包 在JavaScript中,for循环和闭包是两个非常重要的概念。本文将对JavaScript for循环和闭包进行浅谈,并提供六种解决方案来解决for循环中的闭包问题。 首先,让我们来看一个例子。我们有...

    JavaScript闭包

    Javascript中有几个非常重要的语言特性——对象、原型继承、闭包。其中闭包 对于那些使用传统静态...本文将以例子入手来介绍Javascript闭包的语言特性,并结合一点 ECMAScript语言规范来使读者可以更深入的理解闭包。

    javascript闭包的理解

    标题《JavaScript闭包的理解》涉及的知识点主要围绕JavaScript编程中的一个重要概念——闭包。闭包是一个高级且复杂的话题,它是JavaScript语言的核心特性之一,同时也是一大难点。要想熟练运用JavaScript,掌握闭包...

    javaScript闭包的理解

    ### JavaScript闭包的理解 #### 一、闭包的定义与特点 闭包是JavaScript中一个非常重要的概念,它指的是一个函数能够访问并操作其外部作用域中的变量的能力。这一特性使得JavaScript具有了一些其他语言不具备的...

    理解_JavaScript_闭包

    本文结合 ECMA 262 规范详解了闭包的内部工作机制,让 JavaScript 编程人员对闭包的理解从“嵌套的函数”深入到“标识符解析、执行环境和作用域链”等等 JavaScript 对象背后的运行机制当中,真正领会到闭包的实质。

    深入理解javascript原型和闭包

    深入理解javascript原型和闭包(01)——一切都是对象 深入理解javascript原型和闭包(02)——函数和对象的关系

    javascript 闭包

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现。

    Javascript 闭包完整解释

    ### JavaScript闭包完整解释 #### 一、闭包的基本概念 **闭包**是一个非常重要的JavaScript概念,它指的是一个函数能够记住并访问其外部作用域中的变量的能力,即使该函数在其外部作用域之外被调用也是如此。具体...

    浅谈JavaScript闭包

    1. 函数作为返回值:在JavaScript中,如果一个外部函数返回了一个内部函数,那么这个内部函数可以访问外部函数的局部变量,这就形成了闭包。 2. 函数作为参数传递:一个函数可以被当作参数传递给另一个函数,这个被...

    Swift3.0 闭包整理 - CocoaChina_让移动开发更简单1

    Swift3.0 闭包是该语言中的一个重要概念,它是一种可以捕获和存储周围环境中的数据(称为闭包环境或上下文)的匿名函数。闭包在Swift中被广泛用于处理异步操作、排序、过滤等任务。下面将详细阐述Swift3.0中的闭包...

    JavaScript闭包研究及典型应用.pdf

    JavaScript 闭包研究及典型应用 JavaScript 闭包是一种强大的技术,能够在各种场景中发挥重要作用。本文将介绍 JavaScript 闭包的定义、使用场景和典型应用。 闭包函数的定义和使用场景 在 JavaScript 语言中,...

    浅谈js 闭包引起的内存泄露问题

    创建闭包的方式很简单,在JavaScript中,任何函数,只要被创建就会拥有自己的闭包。闭包的常见使用场景包括私有变量、模块模式等。闭包的核心优势在于它能够创建一个独立的作用域环境,避免了全局变量的污染,同时...

    javascript闭包详解中文word版

    本文将以例子入手来介绍Javascript闭包的语言特性,并结合一点 ECMAscript语言规范来使读者可以更深入的理解闭包。闭包是Closure, 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。

    根据一段代码浅谈Javascript闭包

    nAdd = function(){ n += 1; } function f2(){ alert(n); } return f2; } 这里的闭包是f1,封闭了一个变量n和一个函数f2。 我们先无视nAdd,尽量保持原貌重写一下这个函数。 代码如下: function f1(){ var ...

    JavaScript闭包函数

    闭包是ECMAScript (JavaScript)最强大的特性之一,但用好闭包的前提是必须理解闭包。闭包的创建相对容易,人们甚至会在不经意间创建闭包,但这些无意创建的闭包却存在潜在的危害,尤其是在比较常见的浏览器环境下...

    JavaScript闭包详解1

    JavaScript中的闭包是一种高级特性,它允许一个函数访问并操作其外部作用域的变量,即使在外部函数已经执行完毕后。这种机制的核心在于,当内部函数引用了外部函数的变量时,JavaScript会保持对外部作用域的引用,...

    基于JavaScript闭包的Web图片浏览控件的实现.pdf

    基于JavaScript闭包的Web图片浏览控件的实现 本文主要讲解了基于JavaScript闭包原理的Web图片浏览控件的实现,包括JavaScript闭包概念、闭包应用场景、Web图片浏览控件的设计思路和实现方法。 1. JavaScript闭包...

    基于javascript 闭包基础分享

    理解闭包的关键在于理解JavaScript的作用域规则。在实际应用中,闭包是JavaScript工程师必须掌握的概念。尽管闭包提供了强大的功能,但在某些情况下也可能会导致内存泄漏,特别是在旧版浏览器中的JavaScript引擎可能...

Global site tag (gtag.js) - Google Analytics