论坛首页 Web前端技术论坛

Js 的undefined

浏览 11685 次
锁定老帖子 主题:Js 的undefined
精华帖 (0) :: 良好帖 (4) :: 新手帖 (1) :: 隐藏帖 (22)
作者 正文
   发表时间:2009-07-14  
因为javascript会事先给var定义的变量分配地址空间,所以之前定义的变量a与test()内部定义的变量a是不同作用域的变量
0 请登录后投票
   发表时间:2009-07-15  
如下情况使返回 undefined 值:

对象属性不存在,
声明了变量但从未赋值。
0 请登录后投票
   发表时间:2009-07-15  
yuankai 写道
这个是因为javascript的加载顺序有关,从小的作用域往外找。
LZ在test方法里面又声明了局部变量a,所以在test方法执行的时候就在test方法的作用域里面找变量a,但是a只是声明并没有赋值,所以alert(a)的时候就是undefined.
至于为什么变量b是true,是因为在test执行的时候,没有找到this.b,所以就在外部找,正好有一个全局变量b=true,所以alert(b)就是true,后面的内容就没啥好说的。

这几天在看JS, 这个问题不是说找不到里面的, 而是作用域的问题, var关键字的作用, 在函数内定义变量, 不加var关键字的话, 就被认为是全局变量, 所以, 会先得到先定义的true, 然后执行到false后, 就改变了值~
0 请登录后投票
   发表时间:2009-07-15  
lgpcl110 写道
不是很明白,alert(b)时怎么会找外部的b,而alert(a)时不在外面找呢,??

一个是用var在函数内定义了一个局部变量, 而一个是没有用var而在函数内定义了一个全局变量, 分清这点就知道了~
0 请登录后投票
   发表时间:2009-07-16  
这个就是作用域的问题,总之这种问题也不值得花太多的心思,这个a为什么会出现undefined就是因为函数内部也声明了一个var a=200;这个声明覆盖了方法外面的声明。

当然,如果你在java里这样写,结果是不会影响的,这个跟js的解析顺序有关。前面的 yuankai 还有sevenkylin基本已经讲清楚了,我就不啰嗦了。
0 请登录后投票
   发表时间:2009-07-20  
执行的很正常
0 请登录后投票
   发表时间:2009-07-21  
这个主要是var对于本次作用域声明的预先处理,副值操作按照顺序执行,看到的预处理undefined的现象,所以对于var的是用药比较注意,会影响前面的代码执行效果
0 请登录后投票
   发表时间:2009-07-21   最后修改:2009-07-21
sevenkylin 写道
lgpcl110 写道
不是很明白,alert(b)时怎么会找外部的b,而alert(a)时不在外面找呢,??

一个是用var在函数内定义了一个局部变量, 而一个是没有用var而在函数内定义了一个全局变量, 分清这点就知道了~

没有用var一个局部的话,在局部使用全局变量没错,而你var了局部变量,自然就用局部变量覆盖了全局不量,上面有人已经说的很明白了,你就当test()中,顶部有一个var a;
0 请登录后投票
   发表时间:2009-07-23  
yuankai 写道
这个是因为javascript的加载顺序有关,从小的作用域往外找。
LZ在test方法里面又声明了局部变量a,所以在test方法执行的时候就在test方法的作用域里面找变量a,但是a只是声明并没有赋值,所以alert(a)的时候就是undefined.
至于为什么变量b是true,是因为在test执行的时候,没有找到this.b,所以就在外部找,正好有一个全局变量b=true,所以alert(b)就是true,后面的内容就没啥好说的。


这个this说的很到位。
0 请登录后投票
   发表时间:2009-07-23  
就是执行完b=false,b还是全局的,不是在test里var的,函数执行默认没有指定执行对象,会按照全局方法来处理,也就是说全局就是this this.b就是全局的b
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics