javascript - 为什么这个闭包和 IIFE 不起作用?

标签 javascript closures iife

为什么此代码不打印 ij 变量?

(function f() {
  let i = 1;
  let j = 2;
  return () => {
    console.log(i);
    console.log(j);
  }
})()

我知道,我知道......这段代码是的,有效:

let f = () => {
  let i = 1;
  let j = 2;
  return () => {
    console.log(i);
    console.log(j);
  }
}

f()();

是的,最后一个代码可以工作,但我不知道为什么第一个代码不起作用

非常感谢

最佳答案

您正在从函数返回一个函数 (return () => {}),但未调用它。您可以简单地记录函数中的值,而不返回新函数。

(function f() {
  let i = 1;
  let j = 2;
  console.log(i);
  console.log(j);
})();

或者这样调用它。

(function f() {
  let i = 1;
  let j = 2;
  return () => {
    console.log(i);
    console.log(j);
  }
})()();

关于javascript - 为什么这个闭包和 IIFE 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70668648/

相关文章:

Groovy 子类称为访问闭包的父类(super class)方法

javascript - 为什么 public 方法没有在 IIFE 中打印?

Javascript:一个函数,它是 IIFE 以及供以后使用的函数定义

javascript - Angular 1.5。 |单击子组件从父组件调用函数?

javascript - 通过js在div上加载页面后,我的导航栏不会折叠

javascript - 将包含一个巨大字符串 "numbers"的数组(以逗号分隔)转换为数字数组(不是字符串)

html 元素的包装函数中的 Javascript 事件

javascript - 在哪里托管用于分发的 javascript 闭源前端库?

JavaScript 内部函数和性能

javascript - 将特定上下文绑定(bind)到事件处理程序 : Understanding functional context, 返回语句和闭包?