一种导致js全局变量访问不到的情况

大家都知道,js全局变量是每个js函数都能访问和改变其值的,它的作用范围也是整个js文件。但是最近我却碰到一种情况导致全局变量在某个“角落”访问不到,很郁闷。但是却是一个值得注意的小细节,记录下吧。

<html>
    <head>
    <script src="jquery-1.8.3.min.js"></script>
    <script>
        var dimen = 'day';//全局变量
        $(function(){
            //console.log("dimen:" + dimen);
            
            $("#btn").click(function() {
                alert(dimen);
            });
            
            if(false) {
                var dimen = 'good';
            }
        });

        function change() {
            dimen = $("#time").val();//改变全局变量
            //some code....
        }
    </script>
        
    </head>
    
    <body>
        <input type="button" value="测试" id="btn" />
        <select id="time" οnchange="change()">
            <option value="year">年</option>
            <option value="year">月</option>
            <option value="year">日</option>
        </select>
    </body>
</html>

 这个页面上点击“测试”按钮你会发现直接弹出undefined,奇怪的是dimen不是全局变量吗怎么会访问不到呢?

 

仔细检查你的$(function(){})函数里面的这段代码:

 if(false) {
       var dimen = 'good';
}

 你会发现你又重新定义了一个局部变量dimen,和全局变量重名了,这导致dimen瞬间变成局部变量而外部访问不到了。经测试,只有你在$(funciton(){})里这样定义一个跟全局变量重名的局部变量,才会出现这种情况!!

虽然是个小问题但也是我工作中遇到的,顺便提下还是需要多多注意这种比较隐晦的情况。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值