(Javascript) 猴子也明白 之 闭包超级入门 2 函数中的函数
闭包也是函数
一句话,
闭包也是函数。
这是一个关键点。
然后稍微深入一点地说,
闭包是函数中的函数。
到这里,就大概理解了闭包的30%。
也就是说,有人问你
“闭包是啥玩意?”
的话,
“嗯,是写在函数中的函数吧”
如此回答,就算答对了30%。
函数中的函数
在Javascript里,函数里可以再写一个函数。
稍微严谨点的说法是,可以在函数里可以定义别的函数。
//函数中定义别的函数
function outer(){function inner(){
alert(“hello world”);
}
}
以上的代码中,如何调用inner函数呢?
如果把以下代码Copy到记事本里,然后保存成一个,html文件,再用浏览器打开的话:
<script>
function outer(){
function inner(){
alert(“hello world”);
}
}
inner(); // 错误
</script>
以上代码将出错,画面上什么都没有。
因为inner只是一个在outer函数里才可用的局部变量,
在全局环境变量里并没有定义inner这个函数。
再试一下如下代码:
<script>
function outer(){
function inner(){
alert(“hello world”);
}
}
outer(); // 没有任何反应
</script>
以上代码虽然不会出错,但画面上仍然不会表示任何东西。
outer()虽然被执行了,但在outer里面inner只是被定义了,没有被执行。
想要inner被执行,必须在outer里明确地调用inner,如下:
<script>
function outer(){
function inner(){
alert(“hello world”);
}
inner(); // 调用了!
}
outer(); // 弹出“hello world”对话框
</script>
恭喜!著名的“Hello world”终于表示出来了。
outer()被执行时,首先在outer里先定义inner,然后直接执行inner--
到此,你算是理解闭包的30%了。
“函数中的函数”再稍微改进,就可以写出闭包了。
但在此之前,还得再稍微忍耐一下。
我们还得再记住两个技巧:匿名函数 和 函数返回函数