您好,登錄后才能下訂單哦!
Javascript中沒有塊級作用域的概念,這意味著在塊語句中定義的變量,實(shí)際上是在包含函數(shù)中而非語句中創(chuàng)建的
1 function outputNumbers(count){2 for (var i = 0; i < count; i++){3 console.log(i);4 }5 console.log(i);6 }
在for循環(huán)中定義的局部變量i可以再for循環(huán)外訪問,因?yàn)樽兞縤是定義在outputNumbers()的活動(dòng)對象中的,因此從它有定義開始,就可以在函數(shù)內(nèi)部隨處訪問它。
1 function outputNumbers(count){2 for (var i = 0; i < count; i++){3 console.log(i);4 }5 var i;6 console.log(i);7 }
遇到這種情況,他只會(huì)對后續(xù)的聲明視而不見。匿名函數(shù)可以用來模仿塊級作用域并避免這個(gè)問題。
1 (function(){2 //這里是塊級作用域3 })();
以上代碼定義并立即調(diào)用了一個(gè)匿名函數(shù)。將函數(shù)聲明包含在一堆圓括號(hào)中,表示它實(shí)際上是一個(gè)函數(shù)表達(dá)式。而緊隨其后的另一對圓括號(hào)會(huì)立即調(diào)用這個(gè)函數(shù)。
注意:
1 function(){2 //這里是塊級作用域3 }(); //出錯(cuò)
function關(guān)鍵字表示一個(gè)函數(shù)聲明的開始,而函數(shù)聲明后面不能跟圓括號(hào)。然而,函數(shù)表達(dá)式的后面可以跟圓括號(hào)。要將函數(shù)聲明轉(zhuǎn)換成函數(shù)表達(dá)式。
無論在什么地方,只要臨時(shí)需要一些變量,就可以使用私有作用域
1 function outputNumbers(count){2 (function(){3 for (var i = 0; i < count; i++){4 console.log(i);5 }6 })();7 console.log(i); //i is not defined8 }
這種技術(shù)經(jīng)常用在全局作用域中被用在函數(shù)外部,從而限制向全局作用域中添加過多的變量和函數(shù)
1 (function(){2 var now = new Date();3 if (now.getMonth() == 0 && now.getDate() == 1){4 alert("Happy new year");5 }6 })();
其中now現(xiàn)在是匿名函數(shù)中的局部變量,而我們不必在全局作用域中創(chuàng)建它。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。