美文网首页前端进阶之路程序员
【JavaScript】闭包的概念

【JavaScript】闭包的概念

作者: 苏星河 | 来源:发表于2015-12-09 16:01 被阅读249次

背景:

  • 理解闭包,必须首先要理解变量作用域,关于JavaScript的变量作用域,参见我之前的一篇文章《【JavaScript】变量作用域》
  • JavaScript中的函数都是对象

简而言之,JavaScript函数内部的所有变量对外部是不可见的
比如这样的代码会抛出error

var test = function() {
  var i = 0;
}
console.log(i); // undefined

那么怎么让函数访问外部变量呢?
JavaScript拥有函数级的作用域,函数内部调用的函数可以访问其外部函数的变量。所以我们可以在一个函数内部再调用一个函数,这样其内部函数就实现了访问外部变量。这就是所谓的闭包。

闭包的好处是内部函数可以访问定义它们的外部函数的参数和变量


闭包示例

var test = function(status) {
  return {
   getStatus: function(){
     return status;
   }
  };
};
// 测试: 调用test时,它返回一个包含getStatus方法的新对象
var myQuo = test('404');
console.log(myQuo.getStatus());

另一个例子:构造一个函数,当点击一个节点时,输出当前节点的编号

// 这是一个错误的例子,点击任意节点输出结果都为9
// 这个函数绑定了变量i本身,而不是函数在构造时变量i的值
var addHandlers = function(nodes) {    
    var i;    
    for (i = 0; i < nodes.length; i++) {      
        nodes[i].onclick = function(e) {        
            console.log(i);      
        };    
    }  
};

正确的例子·

var addHandlers = function(nodes) {    
    var helper = function(i) {      
        return function() {        
            console.log(i);      
        };    
    };    
    var i;  // 避免在循环中创建函数
    for (i = 0; i < nodes.length; i++) {      
        nodes[i].onclick = helper(i);    
    }  
}

相关文章

  • JavaScript----闭包

    javascript之闭包 闭包的概念     闭包(closure)是 JavaScript 的一种语法特性。 ...

  • js闭包问题

    javascript 闭包的概念,闭包的作用,闭包经典面试题详解(配图解) 函数作用域(闭包前置知识) 要彻底弄懂...

  • JavaScript 中 闭包 的详解

    闭包是什么 在 JavaScript 中,闭包是一个让人很难弄懂的概念。ECMAScript 中给闭包的定义是:闭...

  • JavaScript 中的闭包

    闭包是什么 在 JavaScript 中,闭包是一个让人很难弄懂的概念。ECMAScript 中给闭包的定义是:闭...

  • JavaScript 闭包问题

    1.闭包的概念 JavaScript中什么是闭包?首先我们要知道在JavaScript中,函数中声明变量函数外是无...

  • JS学习理解之闭包和高阶函数

    一、闭包 对于 JavaScript 程序员来说,闭包(closure)是一个难懂又必须征服的概念。闭包的形成与变...

  • 浅谈 JavaScript 闭包

    相信学习 JavaScript 的同学都知道「闭包(Closure)」,这个概念在 JavaScript 中是非常...

  • 【JavaScript】闭包的概念

    背景: 理解闭包,必须首先要理解变量作用域,关于JavaScript的变量作用域,参见我之前的一篇文章《【Java...

  • 从 QuickJS 源码理解 JavaScript 的闭包

    摘要 本文从 QuickJS 源码的角度分析 JavaScript 语言中的闭包的实现原理,首先介绍闭包的概念,然...

  • javascript闭包

    闭包的概念被弄的玄之又玄,好像还跟函数是编程有点关系,今天一探究竟。 什么是javascript闭包? 闭包解决...

网友评论

    本文标题:【JavaScript】闭包的概念

    本文链接:https://www.haomeiwen.com/subject/hlaehttx.html