这里就是一个很普通的定义变量,函数内部修改变量的问题,不调用moving,输出的是0,可调用一下后输出的就是1。说一下我遇到问题的原因,我学的python,这里是前端上的问题,因为受python的影响,开始以为函数内部修改全局变量需要先在函数内部声明一下,然后这里它不声明,直接就改了,我是一脸懵逼,百度答案也不是我想要的,后来在一个学习群里一位热心的无名大哥给了我解释(谢谢那位大哥了,就这一个小问题,我也是搜了好久),我也分享一下:
js中变量作用范围与声明方式有关,var声明的是在文件范围内全局变量,let一般作用于声明在函数范围内的局部变量,因此,我们在moving函数中改为let ileft = 1,这样我们修改的ileft就不会作用到全局变量了。
<script type="text/javascript">
var inum=1;
(function() {
alert(inum);
var inum=2;//这里用var,定义全局变量,不过只在函数内生效,不用var的话会修改全局变量
alert('hello world');
alert(inum);
})();
alert(inum);
</script>
封闭函数可以让我们在对功能添加的时候不对之前的产生影响,我们可以在封闭函数内放心的定义变量,即使与全局变量名称相同也没事,因为封闭函数内相当于一个新的空间,它不会对全局变量产生影响(当然注意用var)。