→ fillano:去看一下ecma262,關於execution context,scope chain 06/18 16:42
: 推 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)