函数的内部变量,为什么会在外部被引用,不是执行完毕自动删除
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了函数的内部变量,为什么会在外部被引用,不是执行完毕自动删除,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1699字,纯文字阅读大概需要3分钟。
内容图文
![函数的内部变量,为什么会在外部被引用,不是执行完毕自动删除](/upload/InfoBanner/zyjiaocheng/227/0ebaf41922b242cc97cc8226ed185549.jpg)
本帖最后由 baidu_25468825 于 2015-02-02 03:01:59 编辑 function counter($d=0) {
$counter = 1+$d;
return function() use(&$counter) {return $counter ++;};
}
$a = counter();
echo $a(); //1
echo $a(); //2
问题:
$a = counter(); //返回闭合函数; 函数执行完毕删除所有内部变量;
ref=2? 好吧等于2; 删除一个; 还有一次引用;
函数内部的变量是局域的,内存地址可以公开使用??????????
搞不明白,局部变量的内存地址怎么可以变成全局的;
echo $a(); //1
echo $a(); //2
我不太理解,请详细的回答下;研究了2小时没研究明白;
----------
function aaa() {
$a =1;
return function() use(&$a) {return $a ++;}; //该$a继承父作用域的$a内存地址;
}
//首先返回的是一个闭合函数: function() use (&$a) {return $a ++;}
//函数嵌套函数,当外层函数执行时,其内部函数变成全局作用域;
//闭合函数: 拥有 $a内存的控制权;同时又是全局函数; 有点......
$a = aaa(); //aaa()执行完毕,清空变量,因&引用,ref_count -1 ,不释放内存;
echo $a(); //1;
echo $a(); //2;
我乱写的,也不知道分析的对不对,请修正指教;
------解决思路----------------------
用什么不理解的?
既然你 use(&$counter) 那当然是要知道这么做的后果的,因为那个 & ,规则就发生了变化
既然是引用,就是两个及以上变量指向同一数据区,删除一个,其他的还在
------解决思路----------------------
js的闭包挺流行,但貌似php很少...
匿名函数赋给$a后,等价于诞生了一个全局函数,但这不是重点...
use中的$counter如果只是拷贝调用,在$a = $counter();的赋值过后,内存也就释放了
偏偏是指针...所以那块内存在这个匿名函数中留了下来
此时匿名函数中的$counter只属于$a,如果你再令$b = counter();,会有另一个独立的$counter
内容总结
以上是互联网集市为您收集整理的函数的内部变量,为什么会在外部被引用,不是执行完毕自动删除全部内容,希望文章能够帮你解决函数的内部变量,为什么会在外部被引用,不是执行完毕自动删除所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。