<!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 回答
慕仙森
TA贡献1827条经验 获得超7个赞
1、如果你所有的变量都定义在最外层,也就是window环境下,你要想一想,如果程序变得越来越大,你一个不小心就把某一个变量修改了,bug很难定位
2、闭包简单来说,就是内层函数能够访问到作用域链上的变量。你的例子太简单了,如果单单只返回值,怎么返回都没什么区别,但是如果你是暴露接口方法,使之能操作你函数里面的变量呢?这就又不一样了,只返回值你永远不能在外层对这个变量进行修改,相当于把你的变量封装了起来,外层不能改变他,也就解决了1里的问题
3、如2中所说,你可以
function func3 () {
var num = 1
function add () {
num++
}
function getNum () {
return num
}
return {
add: add,
getNum: getNum
}
}
var t = func3()
t.add()
t.getNum()
这样是不是就封装了一些操作了,也变得更加有意义呢?例子还是太简单,只是说明对变量的封装。
添加回答
举报
0/150
提交
取消