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 预编译 作用域