JavaScript是弱类型语言,定义变量用关键字var
就能声明,不像java、C++等分int
,float
,char
等。此外,JavaScript是解释执行的,这就让编程上与编译语言有了些差别。
最近在写JavaScript程序的时候,就遇到了一些坑。
- 变量的生存周期不一样;
- 变量的引用结果不一样
- 数组的赋值方式不一样
变量的生存周期
我们知道,在 java 等编译语言中,变量的生存周期通常是在其作用域内,例如定义函数
for (int i=0; i<3; i++)
{
System.out.println(i+"");
}
参数i
的作用域就是在循环体内,它的生命周期也就在此循环体,出了循环体,编译就会报错。但是JavaScript就不一样了,出了循环体,依旧可以引用变量 i
。
for(var i=0;i<3;i++){
alert(i);
}
alert(i);
上面这个代码片段一共弹窗4次,分别是0、1、2、3,我们发现,即便已经出了循环体,i
依旧可以被引用到。当然,这仅限与在函数本函数体内,出了本函数体,就不能引用了。
变量的引用结果
下面来看一个代码片段:
for(var i=0;i<elements.length;i++){
temp=elements[i].href;
elements[i].addEventListener('click', function(){
itemClick(temp);
});
}
我们的HTML代码如下:
<!doctype html>
<html>
<head>
<title>test</title>
<style>
<script src="popup.js"></script>
</head>
<body>
<div id="container">
<a href="http://www.dy2018.com/">电影天堂1</a>
<a href="http://dytt8.net/">电影天堂2</a>
</div>
</body>
</html>
有两个链接,通过以上代码,我们应该实现了点击超链接“电影天堂1”跳转到 “http://www.dy2018.com/” ,点击“电影天堂2”跳转到 “http://dytt8.net/”,然而实际我们发现,不论点击哪个按钮,都是跳转到第二个链接,这是怎么回事,我们明明设置了监听啊?这是因为,JavaScript是解释执行的,并没有编译,因此,当我们点击超链接的时候,调用监听函数时,执行 itemClick(temp)
时,它会找到先找到temp
,而 temp
的内容实际上存储的是最后一次赋值的内容,因此无论我们点击哪个链接,跳转的都会是最后一个链接。
数组的赋值
下面我们来看看数组的赋值方式,在java中,对于下面这种赋值方式,是没有问题的:
public static void main(String[] args)
{
String[] strs = new String[3];
for (int i=0; i<3; i++)
{
strs[i] = i+"--0";
}
for (String s:strs )
{
System.out.println(s);
}
}
打印的结果是
0–0
1–0
2–0
但是在JavaScript中,类似的操作是不允许的,赋值时,下标必须是确定的数字,而不能是变量。
以上就是自己遇到的一些JavaScript中的一些需要注意的地方,知其然,不知其所以然,在此留坑,希望今后回来填上。