作者braveht (冲吧冲吧)
看板Ajax
标题Re: [ js ] 全域和区域变数
时间Sun Jun 15 20:07:56 2008
: 推 abgne:把你的Code贴出来看看.. 06/15 12:26
:
: <script language="javascript">
: var mode='edit';
:
: function upload()
: {
: alert(mode); <==执行到这边时是 undefined
: mode = 'uplaod';
: alert(mode); <== upload
: ....
: }
:
: </script>
我现在也正在学javascript...如果我观念有任何错误烦请告知....
没有用var宣告的变数是global的
不过因为宣告在最外层的变数都是global的
所以上面那段程式看不出有没有用var宣告的差异
改成这样就会看出var的效果
<script language="javascript">
mode='edit'; //有没有用var宣告都没差
function upload()
{
alert(mode); //<==执行到这边时是 undefined
var mode = 'uplaod';
alert(mode); //<== upload
}
upload();
</script>
因为在upload funciton里用了var关键字宣告var,
所以mode在upload function里视为区域变数
不会受到外界同名变数的影响
当然改动了function里的mode变数也不会影响到function外的mode变数
ㄟ...看到这边也许你会觉得好像有点怪怪的..
因为变数的宣告是在function的第二行
为甚麽在第一行会知道function里有宣告mode作为区域变数?
关於这一点...因为我没有深入研究javascript的运行机制
所以我也不是很了解...
不过我通常用这种方法来催眠自己:
因为javascript是物件导向的,function当然也是一个object
物件导向的程式在建立物件时就会知道物件内已宣告哪些合法的物件变数
在function里用var宣告的变数当然也就是那个function object的物件变数
所以在function的第一行就能认得function里所有的变数啦
--
http://blog.roodo.com/meteors
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 125.225.27.225
※ 编辑: braveht 来自: 125.225.27.225 (06/15 20:11)
1F:→ fillano:去看一下ecma262,关於execution context,scope chain 06/18 16:42