<!doctype html>
<html>
<head>
</head>
<body>
<script type="text/javascript">
<!-- 在正常的脚本中,某个方法可以获取到外部的变量,或者全局变量 -->
var num = 11;
function func1(){
console.log(num);
}
func1();
<!-- 但是在外部是无法获取方法内部的局部变量的 -->
function func2(){
var num1 = 22;
num2 = 33;
}
func2();
<!--console.log(num1); 会报错!-->
console.log(num2); <!--可以获取到num2的值,因为不适用var定义变量时,默认是全局变量 -->
<!-- 那么如何在外部获取到内部的变量呢!javascript可以办到 -->
function func3(){
var num3 = 44;
function func4(){
return num3;
}
return func4;
}
var func = func3();
console.log(func());
</script>
</body>
</html>
第三个中...为什么不直接return num3呢。。。
在外面包一个func4有什么区别。。。。。。不都是返回num3吗。。求大神解惑。。这各问题把我弄蒙了
1、如果你所有的变量都定义在最外层,也就是window环境下,你要想一想,如果程序变得越来越大,你一个不小心就把某一个变量修改了,bug很难定位
2、闭包简单来说,就是内层函数能够访问到作用域链上的变量。你的例子太简单了,如果单单只返回值,怎么返回都没什么区别,但是如果你是暴露接口方法,使之能操作你函数里面的变量呢?这就又不一样了,只返回值你永远不能在外层对这个变量进行修改,相当于把你的变量封装了起来,外层不能改变他,也就解决了1里的问题
3、如2中所说,你可以
这样是不是就封装了一些操作了,也变得更加有意义呢?例子还是太简单,只是说明对变量的封装。