<!DOCTYPE html>
<html>
<head>
<title>变量作用域</title>
<meta charset="utf-8">
</head>
<body>
<script type="text/javascript">
//1.js变量作用域,内部环境可以使用外部环境的变量和函数,但是外部外部环境不能引用任何内部的变量和函数。
var n=111;
function f1(){
console.log(n);
}
f1(); //111
function f2(){
var g=222;
}
//2.函数没有调用时候,声明的变量还没有初始化
// console.log(g);//Uncaught ReferenceError: g is not defined
f2();
//console.log(g); //error //函数外部无法读取函数内的局部变量。
//3.函数内部声明变量的时候一定要有var 否则的话就是就定义了全局变量
function f3(){
h=333;
}
//console.log(h);//Uncaught ReferenceError: g is not defined
f3();
console.log(h);//333
//阮一峰的理解 闭包就是能够读取其他函数内部变量的函数。
//种种原因,我们有时候需要得到函数内的局部变量。但是,前面已经说过了,正常情况下,这是办不到的,只有通过变通方法才能实现。那就是在函数的内部,再定义一个函数,然后返回此函数。
function f4(){
var p=999;
function f5(){
console.log(p); // 999
}
return f5;
}
alert(f4());//打印f5函数 function f5(){console.log(p); //999 }
alert(f4);//打印整个f4 function f4(){var p=999;function f5(){console.log(p); // 999}return f5;}
//alert(p);//Uncaught ReferenceError: p is not defined
//一般我们这样调用
// var result=f4();
// result();
//在上面的代码中,函数f5就被包括在函数f4内部,这时f4内部的所有局部变量,对f5都是可见的。但是反过来就不行,f5内部的局部变量,对f4就是不可见的。这就是Javascript语言特有的"链式作用域"结构(chain scope),子对象会一级一级地向上寻找所有父对象的变量。所以,父对象的所有变量,对子对象都是可见的,反之则不成立。 只要把f5作为返回值,就可以在f4外部使用了。
//思考 闭包一定要返回函数
</script>
</body>
</html>
变量作用域
最新推荐文章于 2024-07-05 00:15:00 发布