闭包

105 阅读2分钟

全局变量在页面关闭后被删除

let str = '111'

function fn(){

在函数里面没有使用let 或者 var 

a会变成一个全局变量

局部变量:在函数内部声明的变量(必须使用var) 

var a = '123'  (只能在函数内部访问它 )

console.log(a);

}

fn();

可以在不同的函数中使用名称相同的局部变量

局部变量在函数运行以后被删除

作用域就是变量与函数的可访问范围,即作用域控制着变量与函数的可见性和生命周期。

变量的作用域有两种:全局作用域,局部作用域

let a = 123;  (a是全局变量具有全局作用域)

function fn1(){

和全局作用域相反,局部作用域一般只在固定的代码片段内可访问到

b是局部变量 具有局部作用域

let b = '222'(b是局部变量 具有局部作用域)

console.log(c);}

和全局作用域相反,局部作用域一般只在固定的代码片段内可访问到

最外层函数和在最外层函数外面定义的变量拥有全局作用域

所有未定义直接赋值的变量自动声明为拥有全局作用域

作用域链:可以通过代码访问的属性和一系列仅供JavaScript引擎访问的内部属性该内部属性包含了函数被创建的作用域中对象的集合,这个集合被称为函数的作用域链。(作用域链 首先会在当前的作用域内去变量对应的值如果找不到,会向上一层一层的去寻找)

闭包:一个函数就可以理解为一个闭包(可以读取函数内部的变量让这些变量的值始终保持在内存中)