javascript - JS闭包的概念。。。这两个函数让我凌乱了,他们同样可以返回局部变量,但是我还是分不清区别在哪
PHP中文网
PHP中文网 2017-04-11 13:24:21
[JavaScript讨论组]
function f1(){
    var a=1;
    return a;
}
function f1(){
    var b=1;
    function f2(){
        return b;
    }
    return f2;
}

按照闭包的概念:“函数体内的变量可以保存在函数作用域内的特性就叫做闭包”,第二个才是闭包,但是他们所实现的结果是一样的,他们同样可以实现在函数外面访问函数内部变量的效果,那么第一个f1()函数和第二个具体的区别在哪里呢?

PHP中文网
PHP中文网

认证0级讲师

全部回复(6)
迷茫

闭包的作用在于私有作用域
比如:点击list下li,弹出该li的index

list[i].onclick = function() {

alert(this.index);

}
这样是错误的。

list[i].onclick = (function(a) {

alert(a);

})(index);
这样才是可行的。

高洛峰

个人感觉第二个函数应该是 return f2;而不是 return f2()。然后在函数外调用,最终可以使用 f1 函数内的 b 变量,这就有闭包的意思了

迷茫

javascript函数对象内部不仅包含函数代码逻辑,还包含当前的作用域链。函数之间可以通过作用域链关联起来,函数体内部的变量可以保存在函数作用域内这是闭包。第一个只不过返回了个内部变量。并没有涉及到作用域链,通过作用域链关联函数才是js闭包作用关键所在。

var scope = "global scope"; //全局变量
function checkscope() {     
  var scope = "local scope"; //局部变量
  function f() {return scope;} //在作用域中返回某个值
  return  f();
}
checkscope()                 // => “global scope”

稍作改动

var scope = "global scope"; //全局变量
function checkscope() {     
  var scope = "local scope"; //局部变量
  function f() {return scope;} //在作用域中返回某个值
  return f;
}

checkscope()()        //返回值是什么?

没错就是 local scope

阿神

function f1(){

var b=1;
function f2(){
    return b;
}
return f2;

}
在这个例子中,内部函数使用了变量b,所以变量b不会马上被回收
但是在第一个例子中的变量a会在函数执行完以后马上被回收

伊谢尔伦

第一个示例中的 f1 函数中没有使用闭包,直接 return 了在 f1 函数自己内部定义的变量 a,在 f1 函数进行调用的时候,执行环境(scope)中,能够访问到全局对象(Global)和局域变量(Local)。变量 a 就是在局域变量中(Local)。

第二个示例中,f2 函数中使用了闭包,因为在函数中使用了在 f1 中定义的变量 b,这个变量 b 就会被放在闭包(Closure)中。

很明显这个示例,不适合说明闭包,因为示例2中的闭包构建毫无意义。

题主应该首先看看闭包的用途,再去研究下闭包的使用方式。

天蓬老师

最简单的区别。在f1函数外部,可以访问f1内部的变量b

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号