譬如下面。
复制代码 代码如下:
for(i=0;i<10;i++){//就不写成: var i=0
alert(i);
}
但是,这真的不是个好习惯,下面我就说说为什么写Js的for循环一定要加var,否则会时不时给你带来烦人难查的bug。
譬如现在我们要实现这样的功能:输出
10
20
30
40
50
60
70
80
90
100
通过下面code实现,WriteNumber从1到10循环,每次循环调用TenTimes方法返回10倍的索引值。
复制代码 代码如下:
<script type="text/javascript">
function WriteNumber() {
for (i = 1; i <= 10; i++) {
document.write(TenTimes(i) + "<br/>")
}
}
function TenTimes(v) {
var result = 0;
alert(i);
for (i = 1; i <= 10; i++) {
result += v;
}
return result;
}
WriteNumber();
//alert(i)
</script>
你会发现最终只输出了10。大家可以用下面的代码框运行测试。
[Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]
关于在WriteNumber和TenTimes方法里加不加var,就是说是否声明索引变量i有4种情况:
第一种情况,WriteNumber和TenTimes各有1个for循环,2个循环里均没有用var声明i索引变量。
运行结果:会alert出1。结果只输出了10,不是我们所想要的。
分析:执行WriteNumber时,其作用域内并没有找到声明过的变量i,直接对i进行赋值,则隐式的将i声明为全局变量,(对于函数内部未声明过的变量,如果给它赋值,会隐式的将它声明为全局变量。) 循环开始,i=1,调TenTimes方法,发现TenTimes方法也没有声明过变量i ,所以TenTimes里的i就是全局变量i,就和WriteNumber的i成了同一个。 这时line9 alert出来的自然是1了。TenTimes循环了10次,使得全局的i变成了11,自然WriteNumber就不会执行第2次循环操作了。
验证:如果在WriteNumber();语句后加alert(i),即取消line16的注释,会发现alert出12(12=10+2个i++),证明了i此时为windows对象。
第二种情况,WriteNumber声明了i变量,即line3: var i=1,TenTimes未声明i变量,即line10: i=1。
运行结果:line9 alert(i)处报i未定义错误 ,因为WriteNumber有声明过变量i,所以没有成为全局的i,TenTimes执行时又没有声明过i,所以报未定义。若注释掉line9,输出结果正确。因为当TenTimes里运行到i=1时,隐式将i声明是全局变量,不影响WriteNumber里的i。WriteNumber仍然会执行10次循环。
验证:如果在WriteNumber();语句后加alert(i),即取消line16的注释,会发现alert出11(11=10+TenTimes里的i++),证明了此时有windows.i。
第三种情况,WriteNumber没有声明i变量,即line3: i=1,TenTimes声明了i变量,即line10: var i=1。
运行结果:弹出10个undefined。因为WriteNumber未声明i,隐式将i声明是全局变量,而TenTimes有声明过变量i(补充一句,对于变量的声明都是在预编译中进行的),所以line9 alert(i)里的i不是windows.i,而是TenTimes声明的变量i,此时当然是undefined了。同时,发现输出结果正确,因为TenTimes的i不会影响WriteNumber的全局i,WriteNumber仍然是执行了10次循环。
第四种情况:WriteNumber和TenTimes均用var声明了i。
运行结果:注释掉line9,不说了,好习惯,结果当然完美。
虽然第二、三种情况输出结果是正确的,但是对i的使用很混乱,应该算是运气导致结果正确,因为刚好1个是window.i,一个是函数内部的私有变量i,使得没有冲突。
此文虽然讲的是写for循环为什么一定要加var,但其实讲的是变量的作用域(或者说变量的生命周期)。理解之后,下面的2段code运行结果你应该能准确说出答案吧。
[Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]
[Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]
Ps:说道coding的好习惯,想起了这个:if(a==3) 应该写成if(3==a) 。因为我们常会把==写成1个=,如果把变量写在右边时只写了1个=,就会报编译错误,这样就能及时发现错误。
相关推荐:
文字写作AI生成工具:让创作更简单、更高效
SEO做网站点击:提升网站流量的关键策略,国内ai写作论文
ChatGPT怎么打不开了?解决办法,轻松恢复畅通无阻!,ai订酒店ai对话
SEO优化:让你的网站在竞争中脱颖而出,临沧seo代理
AI网页版本:开启智能时代的新篇章,拼音标调ai
ChatGPT的破解版:AI世界的新突破,ai无禁忌
AI写作的崛起-“只能AI写作”背后的巨大潜力,舞狮摄影ai
AI人工智能:改变未来的科技革命
SEO专业怎么样?未来发展的无限潜力与职业前景,联通ai智能早教
什么是seo艺术,什么是seo seo有何价值 ,ai写作生成器 推荐
AI翻译工具的革命-ChatGPT等技术让语言互通无碍,淘宝ai写作检测准吗
SEO优化做什么的?揭秘SEO优化的核心价值与实战应用,ai做金色
丹东seo是什么怎么选,丹东spr ,黑发ai图
AI免费工具:提升效率与创意的秘密武器
seo种草什么意思,seo yoo na ,三维地震反演AI
SEO模板:提升网站排名,助你快速抢占搜索引擎流量高地,选择seo职业缺点
自动AI写文章:轻松创作时代的全新利器
seo项目是什么,seo是啥 ,ai ued
软件我在AI:改变未来的智能助手
ChatGPT页面空白无法登录?如何解决这一困扰?,温州ai字幕生成
AI助手不需要登陆-畅享便捷生活,随时随地高效工作,ai客服 对话
“爱站”:开启网站优化与流量增长的新纪元,seo入门ppt
ChatGPT可以实现新闻报道的即时自动化生成,怎么更改ai2的图标
SEO快速排名实例:如何通过实战技巧提升网站排名,快速突破流量瓶颈,安徽ai跑步机企业
优化提长:让企业效能提升的秘密武器,长沙网站建设创意
SEO流程全解析:如何提升网站流量与排名,账号如何营销推广
为什么seo吸引人,为什么seo吸引人呢 ,ai路径查找器绘制树
seo经理做什么的,seo经理招聘 ,盲人ai眼镜
什么是seo快排,seo快排方案 ,ai剪图形
整理文章的AI:提升写作效率的智能助手
AI通过算法和数据生成的作品:科技与艺术的跨越,带来无限创意可能,ai优化程序
高效创作新时代AI文案速写工具,让创作更轻松
ChatGPT打不开了吗?如何快速解决常见问题,恢复顺畅体验!,ai13212511845
AI写作免费一键生成5000字:高效创作的革命性工具
SEO站内优化:提升网站排名的核心策略,厦门市网站优化企业
SEO组织:让您的网站流量倍增的秘密武器,seo 绩效标准
SEO外包:提升网站排名与品牌曝光的最佳选择,大创建设网站
SEO优化顾问:让您的网站脱颖而出的秘密武器,ai ps 群
AI人工智能文章生成器写作新纪元
seo读什么书,seo是哪个专业的 ,亚洲9ai吧
ChatGPT故障你从未听过的真相,究竟是什么让它偶尔“失灵”?,ai 图片 矢量
seo需要什么部门,seo主要干什么 ,ai接入仪器
主流seo是什么,seo是什么推广网站 ,AI心理师
ChatGPT出现错误503?你需要知道的解决方案和应对策略,ai拉伸字效
SEO售产-数字营销新战场,助力企业实现盈利增长,去哪找自贡网站建设
seo矩阵运营中心是什么,seo矩阵运营中心是什么意思啊 ,北京ai特效
seo网站反链是什么,网站反链怎么做 ,ai插画头像卡通
SEO可以帮助网站在搜索引擎中获得较高的排名-助力企业数字化转型的关键,赵立新AI换脸图片对比
怎么用AI生成一篇文章?高效创作指南全揭秘!
“洗稿技巧如何让你的文章脱颖而出,轻松提升内容创作水平!”,台州椒江seo企业排名