JavaScript 变量那些事儿

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中的一些需要注意的地方,知其然,不知其所以然,在此留坑,希望今后回来填上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值