国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

理解JavaScript變量作用域更輕松

2024-05-06 14:13:15
字體:
來源:轉載
供稿:網友
JavaScript本身作為一門簡單的語言,就其變量作用域問題一樣令不少人頭暈,這主要是因為JavaScript閉包的存在。本文不打算深入講解JavaScript變量作用域問題(其實本人也沒有能力能把這一話題講的深入些),也不講“閉包”話題,本文只討論最實用的JavaScript作用域知識點。

一、JavaScript作用域分類
JavaScript就兩種作用域:全局(window)、函數級(function)。函數級(function)不要理解為“塊級(大括號{}級)”。

二、區分及定義JavaScript全局變量與局部變量
1.1定義在所有函數最外邊,使用或不使用var關鍵字定義的變量都是全局變量。全局變量其實被解析成window對象的一個屬性,所以我們可以以“window.全局變量名”方式訪問它,推薦在沒有必要的情況下直接使用變量名訪問。如下例子演示了全局變量定義最常見的方法:
代碼如下:
var msg1='This is message 1';
msg2='This is message 2';
alert(window.msg1); //This is message 1 使用window關鍵字進行訪問
alert(window.msg2); //This is message 2
alert(msg1); //This is message 1 省略window關鍵字的訪問方式
alert(msg2); //This is message 2
function otherFunction(){} //其它一些函數或對象聲明代碼
var otherObject={};

1.2在函數內(局部變量運行時環境)一樣可以定義和獲取全局變量。定義的方法就是不使用var關鍵字,而在局部環境中亦可輕松獲得全局變量內容,直接使用全局變量名引用即可。需要注意的是:如果函數內定義了與全局變量同名的局部變量,那么此時函數體將優先使用自己的局部變量,如果此時你非要使用同名的全局變量,請加上window前綴。舉例如下:
代碼如下:
var msg1='This is message 1';
var msg3='This is message 3';
function otherFunction()
{
msg2='This is message 2'; //不使用var關鍵字,其實也是定義一個全局變量
var msg3='Message 3';
alert(msg1); //This is message 1 (函數內當然可以訪問到外面定義的全局變量,再深的函數嵌套一樣能正確獲到這個全局變量,這是JavaScript閉包的其中一種體現)
alert(msg3); //Message 3 (局部變量msg3)
alert(window.msg3); //This is message 3 (使用window前綴訪問同名的全局變量msg3)
alert(this.msg3); //This is message 3 (因為otherFunction ()定義在一個全局的環境中,此時otherFunction ()的this也是指向window,所有你看到window. msg3是等于this. msg3的)
}
otherFunction();
//otherFunction函數外面定義的msg1和里面定義的msg2依然是全局變量
alert(window.msg1); //This is message 1
alert(window.msg2); //This is message 2

2.1使用var關鍵字,在函數體內定義的變量是局部變量,此變量能供其下面所有語句塊({})及子函數使用。這個變量在這個函數里任何地方都可以訪問到,但卻不能在這個函數的外面“直接”訪問(閉包允許間接訪問,或代理訪問,此知識點不在本文討論范圍)。舉例如下:
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 凤山县| 共和县| 开原市| 义马市| 德令哈市| 玛沁县| 湖南省| 苍南县| 昌吉市| 南城县| 烟台市| 东宁县| 灌云县| 大连市| 芷江| 仁布县| 徐闻县| 安顺市| 崇州市| 姜堰市| 蕉岭县| 深水埗区| 米易县| 米脂县| 卫辉市| 镇康县| 崇文区| 天峨县| 淳安县| 军事| 辽阳县| 宁夏| 九寨沟县| 井陉县| 响水县| 张家界市| 尉犁县| 正定县| 太白县| 万山特区| 靖安县|