日期:2014-05-16  浏览次数:20462 次

js 先声明后赋值
本帖最后由 wk84190133 于 2013-02-25 23:09:26 编辑
var num = 10;
function test(){
alert(num);//这里num怎么会是undefined?
var num = 20;
}

求js执行的详细过程?
js,声明标量

------解决方案--------------------
LZ的代码跟下面这段代码是等价的。

var num = 10;
function test(){
  var num;
  alert(num);//这里num怎么会是undefined?
  num = 20;
}

这跟JS的作用域有关,在函数内声明的变量,在整个函数内可见,哪怕是在最后声明,如果在使用前没有赋值,结果就是undefined。
------解决方案--------------------
首先   var  num=10  是个全局变量 ,num=20  则是局部变量 ,函数执行的过程 是 :test首先会创建一个 活动对象 来保存 局部变量,其位于作用域链的第一级,然后第二级 保存的就是全局变量,也就是num=10。查询变量的时候 会从作用域的顶级开始查找,也就是先看局部变量,你这里虽然定声明了局部变量,但是没有赋值 ,js返回的默认值就是undefined。如果函数的参数 没有赋值,对象的属性 没有赋值  也会返回undefined,这三种是 js中常见的返回undefined的情况。
------解决方案--------------------
你在函数里alert()的num是函数下边申明的num  不是全局的那个  此时你的num没赋值  所以undefined
------解决方案--------------------
http://blog.csdn.net/hch126163/article/details/6022557
javascript 预编译 作用域