在javascript闭包中访问函数中的局部变量为什么要这样做呢?
怪我咯
怪我咯 2017-04-10 15:01:21
[JavaScript讨论组]

function f1(){
    var n="tanzongpei";
    return n;
}
var a=f1();
alert(a);

我这样直接返回里面的变量出来也可以呀?为什么要在里面在放一个函数,再返回里面的局部变量呢?

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回复(6)
迷茫

你这样的写法,当函数运行完后,执行环境被销毁,你实际上得到的只是n这个值,之后你也无法再获取到当时函数执行时执行环境中的变量。
而图中的写法,因为返回的是函数,所以函数的执行环境不会被销毁,根据作用域链的原理,你可以使用返回的这个函数访问它的执行环境中的局部变量,而外层函数的执行环境也会保留。

伊谢尔伦

闭包可以保持变量值,达到私有变量的作用,这个变量在函数返回之后还存在,在这之后还可以使用。但是你这样的话,返回之后n就不会存在了。

大家讲道理

使用闭包是为了防止污染全局环境,在闭包里面用一个匿名函数返回变量,能够让变量一直驻留在内存中,不会出现函数执行完之后被垃圾回收机制释放掉。

ringa_lee

其实这样可能更容易理解:

jsfunction f1() {
  var n = 1;
  function f2() {
    return n++;
  }
  return f2;
}

var inc = f1();
var num = inc();// 1, 每调用一次inc n都会加1
var num2 = inc();// 2
怪我咯

换个教材吧,你贴的这个完全不知所谓

ringa_lee

防止冲突 一切都是私有化,节省内存

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

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