美文网首页
JavaScript中的闭包

JavaScript中的闭包

作者: yunshengz | 来源:发表于2020-07-01 13:57 被阅读0次

什么是闭包,闭包的定义是什么

函数和其本身对周围状态的引用两者捆绑在一起构成闭包。也即是说闭包可以从函数内部访问外部的作用域,在js中,每当函数创建时,就会在函数生成时生成闭包。

闭包是js函数作用域的副产品,正是由于JS函数内部可以访问函数外部变量的设定符合了闭包的定义,所以才会有了闭包。

闭包是什么样子的

eg.1:
var name = 'zhang san';
function show() {
    console.log(show);
}

show() // zhang san 

以上例子完全满足闭包的定义:函数内部可以访问函数外部的变量,这就是一个简单的闭包。

eg.2:
function foo(){
  var local = 1
  function bar(){
    local++
    return local
  }
  return bar
}

var func = foo()
func() // 2

上面这个是创建闭包的常见方式,即在一个函数内部创建另一个函数;
在这上面函数bar与变量local组成了一个闭包;
函数bar,return出来,是为了能够在函数foo外能够访问函数bar;如果不return出来,在函数foo外就无法使用这个函数,把return改为window.bar=bar是一样的;所以return bar只是为了bar能被使用,和闭包无关。

eg.3:
var foo = {};

// 初始化
(function (object) {

  var x = 10;

  object.getX = function() {
    return x;
  };

})(foo);

alert(foo.getX()); // 10

立即执行函数与闭包结合使用,匿名函数内部的变量x函数外无法访问,通过函数getx对外暴露出内部变量,这就形成了闭包;
闭包和立即执行和书没有必然联系,只是有时想用到闭包那么可以用(function(){})()来构成闭包,而不是(function(){})()是闭包。

闭包的使用场景

1.利用闭包实现模块化

(function () {
  var a = 10;
  var b = 20;

  function add(num1, num2) {
    var num1 = !!num1 ? num1 : a;
    var num2 = !!num2 ? num2 : b;

    return num1 + num2;
  }

  window.add = add;
})();

add(10, 20);

2.采用函数引用方式的setTimeOut调用(原生的setTimeout传递的第一个函数不能带参数)

function f1(a) {
    function f2() {
        console.log(a);
    }
    return f2;
}
var fun = f1(1);
setTimeout(fun,1000);

引用参考来源

「每日一题」JS 中的闭包是什么?

前端基础进阶(五):闭包

闭包的概念以及使用场景

闭包的使用场景

相关文章

  • 学习JavaScript闭包和作用域笔记

    JS JavaScript闭包和作用域 闭包 JavaScript高级程序设计中对闭包的定义:闭包是指有权访问另外...

  • javascript中闭包是什么

    javascript中闭包是什么 JavaScript 变量可以是局部变量或全局变量。私有变量可以用到闭包。闭包就...

  • JavaScript 闭包问题

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

  • JavaScript 中 闭包 的详解

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

  • JavaScript 中的闭包

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

  • JavaScript----闭包

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

  • JavaScript闭包的理解

    前言 在JavaScript中,闭包对于JavaScript的意义无异于指针在c++中的意义。理解闭包是我们掌握J...

  • js经典题目

    1闭包 链接:学习Javascript闭包(Closure) setTimeout在js单线程中只是放在队列中并未...

  • JavaScript之理解闭包

    一个简单的闭包 例1 理解闭包 闭包是指在 JavaScript 中,内部函数总是可以访问其所在的外部函数中声明的...

  • 你不可不知道的 JavaScript 作用域和闭包

    原文出处:JavaScript Scope and Closures 作用域和闭包是 JavaScript 中重要...

网友评论

      本文标题:JavaScript中的闭包

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