一个js的问题

明致成 2018-11-24 11:32:36
有一个全局变量a,假设a=5;
然后在闭包中进行修改,比如a=10;
如何在闭包外层访问到a=10?????
...全文
282 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
明致成 2018-11-28
  • 打赏
  • 举报
回复
我的初衷是这样的: $scope.currentXQ = '春风花园'; $scope.initBMap = function(){ .................. (function(name){ $scope.currentXQ = name; })(); } 页面渲染完成的时候发现$scope.currentXQ一直是春风小区,并没有发生变化! 但是现在我已经解决了。。。。 谢谢大家!
winzond 2018-11-26
  • 打赏
  • 举报
回复
引用 5 楼 天际的海浪 的回复:
[quote=引用 2 楼 winzond 的回复:]
[quote=引用 1 楼 丰云 的回复:]
如果真是全局变量,那里访问都可以了
<script>
var counter=5;
var add = (function () {
var counter = 0;
return function () {return counter += 1;}
})();
function myFunction(){
document.getElementById("demo").innerHTML = add();
console.log(counter);
}
</script>
虽然我不知道怎么解决楼主的问题,但这样是没有获取到的,一直都输出5[/quote]
修改变量的值时不要加 var 。直接 counter = 0;
你用var就是在函数内重新声明一个同名的局部变量。

楼主的也应该同样是这个问题吧
[/quote]我测试了,不加var,一直输出1,即不是0,也不是每点一次+1。不知道是不是楼主想要的结果
天际的海浪 2018-11-26
  • 打赏
  • 举报
回复
引用 2 楼 winzond 的回复:
[quote=引用 1 楼 丰云 的回复:] 如果真是全局变量,那里访问都可以了
<script>
	var counter=5;
var add = (function () {
    var counter = 0;
    return function () {return counter += 1;}
})();
function myFunction(){
    document.getElementById("demo").innerHTML = add();
	console.log(counter);
}
</script>
虽然我不知道怎么解决楼主的问题,但这样是没有获取到的,一直都输出5[/quote] 修改变量的值时不要加 var 。直接 counter = 0; 你用var就是在函数内重新声明一个同名的局部变量。 楼主的也应该同样是这个问题吧
風灬雲 2018-11-26
  • 打赏
  • 举报
回复
闭包的定义是 一个函数内部的变量被别的函数占用,导致该函数执行完成后变量不被销毁,还能继续通过占用的函数访问变量;
全局变量和闭包没有半毛钱关系;

function test(){
let num = 5 ;
return function(){
num++;
return num
}
}
let getNum1=test(),getNum2=test();
getNum1()//6
getNum1()//7
getNum1()//8
getNum2()//6
winzond 2018-11-26
  • 打赏
  • 举报
回复
闭包产生私有变量,它自己如果不创建方法分享出来,可能是访问不了的,网上找了一个案例,你看看
(function(){
var name='';
Person=function(value){
name=value;
};
Person.prototype.getName=function(){
return name;
};
Person.prototype.setName=function(value){
name=value;
}
})();

var person1=new Person('Lee');
console.log(person1.getName());
person1.setName('lwf');
console.log(person1.getName());

var person2=new Person('aaa');
console.log(person2.getName());
console.log(person1.getName());
person2.setName('bbb');
console.log(person2.getName());
console.log(person1.getName());
---------------------
作者:swpu_lwf
来源:CSDN
原文:https://blog.csdn.net/liwenfei123/article/details/77964222
版权声明:本文为博主原创文章,转载请附上博文链接!
winzond 2018-11-26
  • 打赏
  • 举报
回复
引用 1 楼 丰云 的回复:
如果真是全局变量,那里访问都可以了
<script>
var counter=5;
var add = (function () {
var counter = 0;
return function () {return counter += 1;}
})();
function myFunction(){
document.getElementById("demo").innerHTML = add();
console.log(counter);
}
</script>
虽然我不知道怎么解决楼主的问题,但这样是没有获取到的,一直都输出5
丰云 2018-11-26
  • 打赏
  • 举报
回复
如果真是全局变量,那里访问都可以了

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧