亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

Javascript中的作用域(scope)

2024-07-21 02:14:02
字體:
來源:轉載
供稿:網友

事前準備

學習本教程的最佳方法是隨手準備好Firefox中的工具Firebug。這樣使得您可以即刻測試教程的例子。如果機子上還沒有FireFox和FireBug,就應該盡快安裝一套來用。

定義

作用域scope
1.(名詞)某樣事物執行、操作、擁有控制權的那么一個區域 [1]
2. (名詞) 編寫程序時,程序之中變量的可見度;例如,一個函數能否使用另外一個函數所創建的變量。[2]

可是這能夠說明什么問題呢? 每當有人在說“這是作用域的問題”或“作用域搞錯了”的時候,那就是說某個函數運行起來的時候,找不到正確變量的位置。這樣我們便知道應該從哪一方面入手,查找出問題所在。

正式開始

實際上每一個你定義的函數都是某個對象的方法。甚至是這樣的寫法:

function fn() { 

alert(11);

}

老兄你不是故弄玄虛吧~。做一個這樣的演示可真得是簡單得要命。沒錯!本例不需要任何Javascript文件,服務器或html。你只要打開 firefox,彈出firebug,點擊console tab。在Firefox狀態欄上面看到有>>>提示的地方就可以輸入了。

輸入:
function fn() { alert(11); };

然后回車。一切安然...你剛才做的實際上是定義了一個函數fn。接著試試:

fn();

然后回車。得到11的警告窗口?還不錯吧?接著試試:

window.fn(); 

this.fn();

得到一樣的結果吧?這是因為函數fn是window對象的一個方法,在第二行的"this"的作用域實際指向了windows對象。不過多數情況中你不需要像這樣window.myFunction(...)地調用函數,這樣太麻煩了,程序員工作起來會很不方便。

window對象

window 對象總是存在的,你可理解其為一個瀏覽器窗口對象。它包含了其它所有的對象如document 和所有的全局變量。

你可以打開Firebug,切換到 Script 頁面并在Firebug右側的New watch expression... 里面輸入 window。觀察window對象究竟有什么在里面。

接著,嘗試找出我們之前定義過的fn函數。

另外,每個frame或iframe擁有其自身的window對象,其自身的全局空間。

理解作用域

接下的內容開始有點復雜了。切換到Firebug Console標簽頁然后輸入:

var o1 = {testvar:22, fun:function() { alert('o1: ' this.testvar); }}; 

var o2 = {testvar:33, fun:function() { alert('o2: ' this.testvar); }};

結果是什么?你聲明了o1o2兩個對象,分別都有一些屬性和方法,但值不同。


接著試試:

fun(); 

window.fun();

this.fun();

出錯了,是吧?因為window對象(等價于this)并沒有fun的方法。試一試下面的:

o1.fun(); 

o2.fun();

22和33出來了?非常好!

接下來這部分的內容最復雜啦?;谶@個原始的函數,如果對象的數量多的話,你必須為每個對象加上這個函數-明顯是重復勞動了。這樣說吧,o1.fun寫得非常清晰的而且為了搞掂它已經占用了我一個星期的開發時間。想象一下代碼到處散布著this變量,怎么能不頭疼?如果要將調用(執行)的o1.fun方法但this會執行o2,應該怎么實現呢?試一試下面的:

o1.fun.call(o2);

明白了嗎?當執行o1的fun方法時你強行將變量this指向到o2這個對象,換句話說,更加嚴謹地說:o1.fun的方法在對象o2的作用域下運行。

當運行一個函數,一個對象的方法時,你可將作用域當作this值的變量。

變量的可見度

變量的可見度和作用域的關系非常密切。我們已經了解到,可在任何對象的外部,聲明變量,或在全局的函數(函數也是變量的一種)也可以,更嚴格說,它們是全局對象window的屬性。 全局變量在任何地方都可見;無論函數的內部還是外部。如果你在某一個函數內修改了一個全局變量,其它函數也會得知這個值是修改過的。

對象可以有它自己的屬性(像上面的testvar),這些屬性允許從內部或是外部均是可見的。試:

alert(o1.testvar); // 從外部訪問o1的屬性testvar

從內部訪問的演示可在兩個測試對象的fun方法找到。

用關鍵字var在內部聲明,相當于聲明局部變量(局部聲明也是在一條鏈上,即Scope Chain 作用域鏈上,Frank注):

i = 44; 

function fn2() {

var i = 55;

alert(i);

}

fn2();

將得到什么?對了,55。聲明在函數fn2的變量i是一個本地變量(局部變量),和等于44的全局變量i 44沒什么關系。 But:

alert(i);

這會訪問全局變量i,顯示44。

希望本文能幫助讀者徹底理解作用域變量可見性的含義。

延伸閱讀:

  1. Scope in JavaScript
  2. Ext Programmer's API Documentation
  3. Ext User Forums
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美老女人在线视频| 国产香蕉一区二区三区在线视频| 日韩欧美视频一区二区三区| 亚洲精品久久久久中文字幕二区| 国产成人福利网站| 国产一区二区三区在线观看视频| 91视频8mav| 欧美激情精品久久久久久久变态| 国产91精品黑色丝袜高跟鞋| 日本不卡视频在线播放| 欧美日韩亚洲视频| 中文字幕精品一区久久久久| 夜夜嗨av一区二区三区免费区| 国内精品一区二区三区四区| 亚洲欧美日韩第一区| 成人xvideos免费视频| 日韩第一页在线| 久久艹在线视频| 亚洲裸体xxxx| 亚洲第一网站免费视频| 欧美激情精品久久久久久大尺度| 日韩女优人人人人射在线视频| 国产免费亚洲高清| 2018中文字幕一区二区三区| 国产精品高潮粉嫩av| 性欧美视频videos6一9| 日韩精品电影网| 久久精品久久久久电影| 亚洲成人性视频| 亚洲午夜未满十八勿入免费观看全集| 久久精品久久久久久国产 免费| 久久天堂电影网| 日韩免费在线看| 中文字幕亚洲色图| 成人国产精品久久久| 在线视频日本亚洲性| 欧美又大又粗又长| 色哟哟入口国产精品| 亚洲最大福利网站| 亚洲欧美精品伊人久久| 黄色精品一区二区| 日本精品视频在线观看| 日韩综合中文字幕| 狠狠色狠狠色综合日日五| 国精产品一区一区三区有限在线| 亚洲男人的天堂在线| 日韩成人免费视频| 97色在线视频| 韩国三级电影久久久久久| 久久久久中文字幕| 精品国产一区二区三区久久久狼| 97精品视频在线| 中文字幕在线成人| 久久久久久噜噜噜久久久精品| 久热99视频在线观看| 91精品综合视频| 91九色蝌蚪国产| 69av视频在线播放| 欧美激情第99页| 国产精品网址在线| 欧美在线一区二区视频| 不卡在线观看电视剧完整版| 91av在线视频观看| 亚洲v日韩v综合v精品v| 亚洲午夜av电影| 视频在线观看99| 欧美午夜宅男影院在线观看| 在线一区二区日韩| 亚洲一区制服诱惑| 视频一区视频二区国产精品| 欧美最猛性xxxxx(亚洲精品)| 国产精品久久久久免费a∨大胸| 91老司机在线| 亚洲精品国产拍免费91在线| 成人在线一区二区| 91精品视频免费观看| 国产欧美日韩免费看aⅴ视频| 欧美日韩成人在线视频| 久久男人的天堂| 日韩va亚洲va欧洲va国产| 精品国产鲁一鲁一区二区张丽| 国产午夜精品理论片a级探花| 国内精品一区二区三区四区| 欧美激情喷水视频| 91精品久久久久久久久青青| 欧美精品www在线观看| 欧美日韩第一页| 亚洲免费福利视频| 日韩va亚洲va欧洲va国产| 日韩精品在线免费观看视频| 国模精品视频一区二区| 成人黄色网免费| 国产高清视频一区三区| 91香蕉嫩草神马影院在线观看| 欧美精品免费播放| 国产亚洲一区二区精品| 一区二区三区视频免费在线观看| 狠狠躁18三区二区一区| 日韩在线观看高清| 不卡毛片在线看| 久久色在线播放| 欧美最顶级的aⅴ艳星| 91黑丝高跟在线| 日韩精品视频在线播放| 国产一区二区三区丝袜| 青草青草久热精品视频在线网站| 另类天堂视频在线观看| 91在线直播亚洲| 欧美日韩综合视频| 成人av电影天堂| 国产精品成人在线| 日韩精品在线视频美女| 欧美老女人在线视频| 精品在线欧美视频| 亚洲人午夜色婷婷| 欧美激情在线观看视频| 色老头一区二区三区| 国产91精品久| 7777精品久久久久久| 日韩在线免费视频观看| 97精品久久久中文字幕免费| 狠狠久久五月精品中文字幕| 久久综合网hezyo| 国产一区二区三区精品久久久| 色噜噜狠狠色综合网图区| 欧美在线免费视频| 美女啪啪无遮挡免费久久网站| 久久久久久久999精品视频| 精品亚洲国产视频| 91亚洲国产精品| 日韩电影中文 亚洲精品乱码| 欧美日本黄视频| 国产精品久久久久免费a∨大胸| 91精品在线一区| 奇门遁甲1982国语版免费观看高清| 日韩欧美在线视频| 国产精品女人网站| 精品国产电影一区| 国产成人精品亚洲精品| 欧美性20hd另类| 国产精品视频区1| 国产伦精品免费视频| 日韩欧美aⅴ综合网站发布| 国模吧一区二区| 97超级碰在线看视频免费在线看| 97久久久免费福利网址| 中文字幕亚洲自拍| 日韩精品一二三四区| 2020国产精品视频| 一区二区三区 在线观看视| 91国产视频在线播放| 欧美午夜精品伦理| 日韩成人中文字幕| 韩剧1988免费观看全集| 91伊人影院在线播放| 欧美日韩一区二区在线| 亚洲字幕一区二区| 日韩在线视频观看| 国产精品视频自在线| 欧美成人sm免费视频| 91大神在线播放精品| 成人性生交xxxxx网站| 亚洲第一网中文字幕| 久久深夜福利免费观看|