群聊天时学习到的两个JS知识(变量范围,Foreach顺序)
2010-07-29 16:03
309 查看
今天在群里聊天的时候学习到了一些以前没有注意过的JavaScript知识,特记录下来。
废话不说,请诸位先分别在FireFox以及IE下运行以下代码:
代码
点击这里看结果
运行结果:
Firefox:
str1:abc
str2:abc
alert("str1:" +str1); 这行代码报错。
alert("str2:" +str2); 这行代码正常输出
IE:
str1:abc
str2:bac
alert("str1:" +str1); 这行代码报错。
alert("str2:" +str2); 这行代码正常输出
原因分析:
1)ECMA没有规定for( var i in arr)的顺序,所以不同浏览器的实现可能不同。所以为了得到确定的结果,各位以后还是按第一个循环的方式写吧(即用普通的For循环)。
2)str1是局部变量,在函数外不能访问;str2是隐式创建的全局变量,所以在函数外也能访问。
废话不说,请诸位先分别在FireFox以及IE下运行以下代码:
代码
<html> <head> </head> <body> <script type="text/javascript"> function show() { var arr = []; arr[1] = "b"; arr[0] = "a"; arr[2] = "c"; var str1 = str2 = ""; for( var i = 0; i < arr.length; i++) { str1 += arr[i]; } for( var i in arr) { str2 += arr[i]; } alert("str1:" + str1); alert("str2:" + str2); } show(); alert("str2:" +str2); alert("str1:" +str1); </script> </body> </html>
点击这里看结果
运行结果:
Firefox:
str1:abc
str2:abc
alert("str1:" +str1); 这行代码报错。
alert("str2:" +str2); 这行代码正常输出
IE:
str1:abc
str2:bac
alert("str1:" +str1); 这行代码报错。
alert("str2:" +str2); 这行代码正常输出
原因分析:
1)ECMA没有规定for( var i in arr)的顺序,所以不同浏览器的实现可能不同。所以为了得到确定的结果,各位以后还是按第一个循环的方式写吧(即用普通的For循环)。
2)str1是局部变量,在函数外不能访问;str2是隐式创建的全局变量,所以在函数外也能访问。
相关文章推荐
- Node.js学习--基础知识(8)--全局对象和全局变量
- JS 面试知识学习历程(第七天) -- 事件、Ajax、存储
- [学习笔记01]js基础变量及数据类型
- Node.js学习--基础知识(2)--异步IO与事件式编程
- JS学习笔记(二)变量、作用域及内存问题
- JS学习2(基础知识)
- Node.js学习--基础知识(6)--常用工具util和事件EventEmitter
- java学习个人笔记---类成员变量初始化顺序
- 学习js基础知识的疑惑及解答
- js基础知识相关学习笔记记录
- 学习Vue.js过程中的知识补充
- C语言知识点学习之if语句变量比较顺序
- JS学习(三) ---变量作用域
- shell学习二-----变量基本知识
- javascript学习之解析顺序和变量作用域
- 继续算法课的学习!归并排序的模版函数的递归实现(merge函数用两个来实现,记得检查左右边界指针的范围哦)
- 从零开始前端学习[48]:js中的变量和this的初步认识
- JS学习干货(一)-数据类型和变量
- javascript学习(二)js变量
- [Java,JS] - 不使用第三个变量完成两个整数的交换