前端面试 JavaScript— 闭包有哪些表现形式?

Posted aiguangyuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端面试 JavaScript— 闭包有哪些表现形式?相关的知识,希望对你有一定的参考价值。

在真实的场景中,究竟在哪些地方能体现闭包的存在?

1. 返回一个函数;

function f1() 
  var a=2;
  return function f2() 
    console.log(a);
    //2  
  ;
;
var num=f1();
num();

2. 作为函数参数传递;

var a = 1;
function f1() 
  var a = 2;
  function f2() 
    console.log(a);
  ;
  f3(f2);
;
function f3(fn) 
  fn();
;
f1();
// 2

3. 在定时器、事件监听、Ajax请求、跨窗口通信、Web Workers或者任何异步中,只要使用了回调函数,实际上就是在使用闭包;

以下的闭包保存的仅仅是window和当前作用域:

// 定时器
setTimeout(function timeHandler()
  console.log('定时器');
,100);

// 事件监听
$('#app').click(function()
  console.log('事件监听');
);

4. IIFE(立即执行函数表达式)创建闭包,保存了全局作用域 window 和 当前函数 的作用域,因此可以使用全局的变量。

var a=2;
(function IIFE()
  console.log(a);
  // 2
)();

以上是关于前端面试 JavaScript— 闭包有哪些表现形式?的主要内容,如果未能解决你的问题,请参考以下文章

Javascript面试题一套

前端面试问题(JavaScript)

前端面试 JavaScript— 什么是闭包?

2022前端最新高频面试题总结(附答案)

前端面试 JavaScript— 闭包产生的原因?

前端JavaScript基础面试题01_JS基础知识(中)作用域闭包