关于闭包理解

2021-07-25  本文已影响0人  我家有个王胖胖

https://zhuanlan.zhihu.com/p/22486908

https://zhuanlan.zhihu.com/p/106287246

1.函数可以访问函数内部定义的变量,也可以访问函数外部定义的变量

//内部
function add(){
  var counter = 0;
  conuter++;
  return counter;
}
//外部
var counter = 0;
function add(){
  counter++;
  return counter;
}

2.函数内部的变量只能在函数内部访问

function add(){
  var counter = 0;
  conuter++;
  return counter;
}
console.log(counter);//undefined

注:counter 是一个 全局 变量。

在web页面中全局变量属于 window 对象。

全局变量可应用于页面上的所有脚本。

在第一个实例中,counter 是一个 局部 变量。

局部变量只能用于定义它函数内部。对于其他的函数或脚本代码是不可用的。

全局和局部变量即便名称相同,它们也是两个不同的变量。修改其中一个,不会影响另一个的值。

注意:变量声明时如果不使用 var 关键字,那么它就是一个全局变量,即便它在函数内定义。

2.变量的生命周期

全局变量的作用域是全局性的,即在整个JavaScript程序中,全局变量处处都在。

而在函数内部声明的变量,只在函数内部起作用。这些变量是局部变量,作用域是局部性的;函数的参数也是局部性的,只在函数内部起作用。

3示例,计数器困境

设想下如果你想统计一些数值,且该计数器在所有函数中都是可用的。

你可以使用全局变量,函数设置计数器递增:

var counter = 0;
function add(){
  counter += 1;
console.log(counter);
  return counter;
}
add();//1
add();//2
add();//3

上一篇下一篇

猜你喜欢

热点阅读