javaScript中变量的作用域和闭包
直接po代码和截图
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>javaScript中变量的作用域和闭包</title>
<script type="text/javascript">
/*
作用域:变量的作用范围
全局变量:相对函数外部或者事件外部,全局变量,作用范围比较大
局部变量:相当于私有变量,只能作用于当前的范围之内
*/
var x = 66;//全局变量,作用范围比较大
function f1() {
var y = 88;//局部变量,相当于私有变量,作用范围只能在f1函数内部
console.log(x);
}
function f2() {
var z = 99;//局部变量,相当于私有变量,作用范围只能在f2函数内部
console.log(x);
}
f1();
f2();
/*
闭包:使用别人的私有变量
*/
function f3(){
var a = 20;
}
f3();
// console.log(a);//报错a is not defined
function f4(){
var b = 30;
return b;
}
console.log(f4());
var result = f4();
console.log(result);
function f5() {
var c = 50;
//不带var关键字,声明的变量为全局变量
h = function() {
c++;
}
return function() {
console.log(c);
}
}
var myResult = f5(); //返回值为一个匿名函数
myResult(); //结果为50
h(); //c变量累加1
myResult(); //结果为51
//闭包缺点:闭包会将值存储在内存里面
var address = "江西省于都县";
function f6(){
console.log(address);
}
function f7(){
var address = "江西省赣州市于都县";
f6();
}
f7(); //结果为江西省于都县
//声明变量,如果变量名称相同,就近原则
var hometown = "江西省赣州市于都县渡江大道6666666号";
function f8(){
var hometown = "于都县88888号";
function f9(){
console.log(hometown);
}
f9();
}
f8(); //结果为于都县88888号
function f10() {
var m = 90;
return function() {
m++;
console.log(m);
}
}
var fun = f10();
fun();
fun();
/*
使用闭包:
优点:可以使用方法内部的局部变量
缺点:会将闭包的值存储在内存里面, 内存泄露
尽量避免使用闭包
*/
</script>
</head>
<body>
<h1>javaScript中变量的作用域和闭包</h1>
</body>
</html>