自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

JavaScript變量作用域之我見(jiàn)

開(kāi)發(fā) 前端
相信大家都知道,JavaScript中變量作用域只有兩種,全局作用域與函數(shù)中的局部作用域,文本就主要探討JavaScript變量作用域。

相信大家都知道,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è)變量的,這種依賴于代碼解析順序的特殊情況,不在我們這篇文章的討論之列)。

比如下面的代碼:

  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

javascript變量作用域之我見(jiàn)

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

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

  1. debugger

javascript變量作用域之我見(jiàn)

可以看到,單獨(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

【編輯推薦】

  1. 泄露你的JavaScript技術(shù)很爛的五個(gè)表現(xiàn)
  2. 經(jīng)典格斗游戲《街頭霸王》的JavaScript實(shí)現(xiàn)
  3. 九個(gè)令人驚嘆的HTML 5和JavaScript實(shí)驗(yàn)
  4. 分享7款超棒的JavaScript網(wǎng)格插件
  5. 對(duì)JavaScript中call和apply的理解
責(zé)任編輯:陳貽新 來(lái)源: 劉陽(yáng)的博客
相關(guān)推薦

2013-09-05 10:07:34

javaScript變量

2016-12-19 11:10:32

JavaScript變量作用域

2011-09-06 09:56:24

JavaScript

2019-03-13 08:00:00

JavaScript作用域前端

2020-12-16 11:09:27

JavaScript語(yǔ)言開(kāi)發(fā)

2017-09-14 13:55:57

JavaScript

2021-03-09 08:50:58

JavaScript前端作用域

2010-01-07 16:16:03

VB.NET變量作用域

2021-10-28 10:26:35

Javascript 高階函數(shù)前端

2020-11-19 07:49:24

JS變量作用域

2015-07-21 13:39:58

Javascript作用域

2011-05-12 18:26:08

Javascript作用域

2009-06-01 11:16:48

PHP網(wǎng)站開(kāi)發(fā)變量作用域

2015-08-18 13:42:42

js作用域鏈變量

2010-02-03 16:42:45

C++變量作用域

2024-03-14 11:27:16

C++變量編程

2021-12-06 07:15:48

Javascript作用域閉包

2009-11-03 11:40:37

VB.NET共享變量

2021-05-25 10:15:20

JavaScript 前端作用域

2015-07-03 11:23:51

JavaScript作用域聲明提前
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)