javascript - jq变量作用域问题,请自己debug!
黄舟
黄舟 2017-04-10 17:49:46
[JavaScript讨论组]
**var x = 1
$(document).ready(function(){
    alert(x)
})

↑以上输出正常**

var x = 1
$(document).ready(function(){
    alert(x)
    var x = 2;
    alert(x)
})

第一个x为undefined
黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(5)
阿神

这不是作用域的问题,是变量声明提升,sf上类似的问题和文章也有很多。

伊谢尔伦

结果没有任何问题,楼上说的对,这是一个变量声明提升的问题,通过var声明的变量会提升,但是赋值却会按顺序来,第二段那个var a覆盖了全局作用域里的var a=1,在执行第一个alert(a)时,函数里的a被声明了,却没来得及赋值当然就是undefined

PHP中文网

变量提升的问题
第二段代码相当于

var x=1;
$(document).ready(function(){
var x;
alert(x);
x = 2;
alert(x)

})
第一个alert的x定义了但是没有值
这样可以看得清楚了吧

PHPz

就是一个简单的变量提升问题,可以看看这篇文章:
JavaScript变量提升

迷茫

个人觉得其实这个本质是作用域或者namespace的问题,因为js编译期函数里面对x的赋值就确定了x在函数内部的namespace里面,而alert(x)
的时候,却发现没有赋值,因此就是undifined, 而如果直接alert(x), 没有赋值就不会在函数的namespace里面放入x, 而是去找其它作用域的, 于是找到最外面的x,因此可以输出。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号