日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
JavaScript變量作用域之我見(jiàn)

相信大家都知道,JavaScript中變量作用域只有兩種,全局作用域與函數(shù)中的局部作用域(有人認(rèn)為不同script節(jié)點(diǎn)間也存在一種作用域,稱之為段作用域,理由是在后面的script的節(jié)點(diǎn)中定義的變量,在這個(gè)script節(jié)點(diǎn)沒(méi)有被解析之前,前面的script節(jié)點(diǎn)是不能訪問(wèn)這個(gè)變量的,這種依賴于代碼解析順序的特殊情況,不在我們這篇文章的討論之列)。

10年積累的成都網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有長(zhǎng)汀免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。

比如下面的代碼:

 
 
 
 
  1. var a = 1;  
  2. function f(b)  
  3. {      
  4. var c = 2;  

a就是我們聲明的全局變量,c就是我們聲明的局部變量,b作為函數(shù)f的形參,也是一個(gè)局部變量。

我們?cè)倏聪旅娴拇a:

 
 
 
 
  1. function outer()  
  2. {  
  3.     var o;     
  4.  function inner()  
  5. {  
  6.         var i;   
  7.    }} 

可以看到o和i都是局部變量,只不過(guò)o的作用域范圍為函數(shù)outer的函數(shù)體,而i的作用域范圍為inner的函數(shù)體。

我們?cè)倏匆欢未a:

 
 
 
 
  1. var g = 1;    
  2.  function outer(){        
  3.      var o = 1;       
  4.      function inner(){    
  5.    var i = 1;         
  6.     debugger;         
  7.      }         
  8.     inner();      
  9.  }    
  10.  outer(); 

debugger?沒(méi)錯(cuò),就是debugger。呵呵,我們單獨(dú)運(yùn)行這段代碼,打開(kāi)瀏覽器的調(diào)試環(huán)境,比如ff瀏覽器的firebug

我們選擇腳本這一項(xiàng),然后查看debugger運(yùn)行時(shí)的調(diào)用堆棧情況,可以看到,除了有inner,outer以外,還有一個(gè)scope1.html()這么一個(gè)函數(shù),這個(gè)函數(shù)從何而來(lái)的?

我們?cè)倏慈缦麓a:

 
 
 
 
  1. debugger; 

可以看到,單獨(dú)運(yùn)行debugger的時(shí)候,firebug的調(diào)用堆棧只有一個(gè)scope1.html()這個(gè)函數(shù)被調(diào)用。

我們知道,此時(shí)是沒(méi)有任何自定義的函數(shù)被調(diào)用的,那么這個(gè)函數(shù)從何而來(lái)的?我們不妨做如下大膽猜測(cè),這是瀏覽器的js引擎自動(dòng)生成的,我們所有的代碼都運(yùn)行在一個(gè)瀏覽器預(yù)先定義的一個(gè)函數(shù)里,而在這個(gè)函數(shù)里聲明的變量,就是我們所謂的全局變量。

這樣,我們就可以以一種一致的方式,去看待JavaScript代碼:所有的代碼都是以函數(shù)方式運(yùn)行的,JavaScript的變量作用域只有一種,那就是函數(shù)的局部作用域。

以上言論純屬個(gè)人意見(jiàn),有不同見(jiàn)解,歡迎拍磚。

ps:

1 關(guān)于scrope1.html()這個(gè)函數(shù),在不同的調(diào)試環(huán)境下,命名可能不一樣,比如ie下就是global script code,chrome下就是anonymous function。

2 推薦大家都運(yùn)行一下上面的代碼,查看一下函數(shù)運(yùn)行時(shí)的調(diào)用堆棧以及變量的監(jiān)控情況,對(duì)于理解JavaScript的作用域、作用域鏈、閉包等概念都有很大的幫助。

原文鏈接:http://www.cnblogs.com/rt0d/archive/2011/04/18/2019242.html


分享文章:JavaScript變量作用域之我見(jiàn)
瀏覽路徑:http://m.5511xx.com/article/djpgges.html