变量的作用域以及闭包
变量的作用域
就是你定义的变量可以使用的代码范围
全局变量
局部变量
全局变量
全局变量,顾名思义,就是在全局都能够使用的变量。在浏览器解析js代码时,会在内存中开辟出一块空间来存储变量,在函数需要使用时,可以直接从内存中调用。
局部变量
局部变量,只在函数执行时生成的调用对象中存在,在函数执行完毕时局部变量即刻销毁。因此在程序设计中我们需要考虑如何合理声明变量,这样既减小了不必要的内存开销,同时能很大程度地避免变量重复定义而覆盖先前定义的变量所造成的Debug麻烦。
举例说明
var a = 1;
console.log(a);
打印得到1.
var a = 1;
function example(){
console.log(a);
}
打印得到1.
function example(){
var b = 2;
console.log(b);
}
example();
打印得到2.
function example(){
var b = 2;
}
console.log(b);
example();
打印报错 b is not defined
闭包
闭包就是能够读取其他函数内部变量的函数。由于在javascript中,只有函数内部的子函数才能读取局部变量,所以说,闭包可以简单理解成“定义在一个函数内部的函数。所以,在本质上,闭包是将函数内部和函数外部连接起来的桥梁。
function example (){
var b = 2;
return function (){
b++;
console.log(b);
}
}
var example1 = example();
example1();
打印得到3.
当我们在打印console.log(example1)的时候,我们会发现打印出来的是example内部的函数
console.log(example1);
打印得到:
ƒ (){
b++;
console.log(b);
}
自执行函数
第一种格式
(function(){
})()
第二种格式
(function(){
}())