javascript - js中全局变量和局部变量初始化问题
巴扎黑
巴扎黑 2017-04-11 12:36:14
[JavaScript讨论组]
var age=100;
function box(){
    age++;
}
box();//age=101
box();//age=102

function box(){
var age=100;
age++;
return age;
 }

box();//age=101;
box();//age=101

为什么全局变量初始化过后,调用函数会累加?而局部变量每次调用变量都会初始化一次?
他们这个过程中发生了什么呢?是因为储存方式,内存的原因??

巴扎黑
巴扎黑

全部回复(2)
大家讲道理

第一个例子中的age在全局中声明,即全局变量,所以age一直存在,每次调用box()时会根据作用域链找到全局作用域中的age,所以会一直累加;
第二个例子中的age在box中声明,即局部变量,agebox调用时创建,调用完box()即被销毁,下次再调用box时会创建一个新的age,调用完再销毁,所以无法实现累加,如果想实现的话,可以使用闭包,创建闭包之后对私有变量处于引用状态,不会销毁,存在内存中,可以实现累加。

function box(){
    var age=100;
    return function() {
        age++;
        console.log(age);
    }
}
var b = box();
b(); // 101
b(); // 102

学习Javascript闭包(Closure)

大家讲道理

https://segmentfault.com/q/10...
你可以看这个。

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

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