首页 > Web开发 > 详细

effective js-11-熟练使用闭包

时间:2016-03-01 02:12:30      阅读:246      评论:0      收藏:0      [点我收藏+]

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>js-熟练掌握闭包</title>

</head>

<body>

<script>

?

/*******第一点(允许引用当前函数以外定义的变量)**************/

function outer2() {

? ?var str = "I am Out..";

? ?function inner(inStr) {

? ? ? ?alert(str + " -- " + inStr); // 可以引用到函数外的str

? ?}

? ?return inner("I am inner..");

}

outer2();

?

/*******第二点(即使外部函数已经返回,但是闭包依然可以引用外部函数定义的变量)**************/

function outer() {

? ?var str = "I am Out.";

? ?function inner(inStr) {

? ? ? ?alert(str + " -- " + inStr);

? ?}

? ?return inner; // 返回后,依然可以引用到 str.

}

outer()("I am inner1.");

outer()("I am inner2.");

?

/*******第三点(闭包存储的是外部变量的引用,而非值的副本)**************/

function wrapEle(ary) {

? ?var ret = [], i, n;

? ?for(i = 0; i < ary.length; i++) {

? ? ? ?ret[i] = function() {

? ? ? ? ? ?return ary[i];

? ? ? ?};

? ?}

? ?alert("i: " + i); // 3

? ?return ret;

}

var wrapped = wrapEle([1, 2, 3]);

var value = wrapped[0](); // 实际上执行的是 function() {return ary[3]};

?// 存储的是外部变量i的引用,外部方法执行完成后,i = 3;

alert(value); // undefined

?

</script>

?

<p>

?

★★★关于闭包必须知道的是★★★:

1. 允许引用当前函数以外定义的变量

2. 即使外部函数已经返回,当前函数(闭包)依然可以引用外部函数定义的变量

3. 闭包可以更新外部变量的值,实际上,闭包存储是外部变量的引用,而不是外部变量值的副本

</p>

</body>

</html>

effective js-11-熟练使用闭包

原文:http://mumu-shoucang.iteye.com/blog/2279529

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!