jq变量作用域问题,请自己debug!

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

↑以上输出正常**

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

第一个x为undefined
阅读 3.1k
5 个回答

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

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

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

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

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏