您的位置:首页 > Web前端 > JavaScript

(Javascript) 猴子也明白 之 闭包超级入门 2 函数中的函数

2012-06-12 01:14 295 查看

闭包也是函数

一句话,

闭包也是函数。

这是一个关键点。

 

然后稍微深入一点地说,

闭包是函数中的函数。

到这里,就大概理解了闭包的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%了。

 

“函数中的函数”再稍微改进,就可以写出闭包了。

但在此之前,还得再稍微忍耐一下。

我们还得再记住两个技巧:匿名函数 和 函数返回函数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: