js的小题

//闭包实例代码
function fn1() {
  let a = 1;
  function fn2() {
    a++;
    console.log(a);
  }
  console.log(a,'a')
}
fn1();
执行结果: 1 'a'

js的小题_第1张图片

现在思考怎么调用里面的fn2函数呢?

答案是:

//闭包实例代码
function fn1() {
  let a = 1;
  function fn2() {
    a++;
    console.log(a);
  }
  console.log(a,'a')
  return fn2 //将fn2返回出去 然后用字段来接收
}
let a = fn1() // 用a来接收fn1执行后的结果fn2函数体
a() // 执行fn2,得到里面的执行结果

js的小题_第2张图片

当然也可以直接在return的时候就执行:

js的小题_第3张图片

现在尝试多次调用a()这个函数:

结果是一直增加的

原因:

执行两次 a() 后结果增加,是因为 fn2 函数中的变量 a 是一个闭包,它在 fn1 函数被调用时被创建并初始化为1,并且可以在 fn2 函数中被修改和使用。

第一次调用 a() 时,a 的值会递增为2,并输出2。第二次调用时,a 的值再次递增为3,并输出3。

这是因为每次调用 a() 时,都会访问外部函数 fn1 中的 a 变量,并且可以修改它的值。由于 a 变量是一个闭包,所以其值在不同的函数调用之间是保持不变的。

需要注意的是,在实际开发中,可能需要谨慎地使用闭包,以免出现意外的副作用或内存泄漏问题

你可能感兴趣的:(javascript,前端,开发语言)