日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言块级作用域_块级作用域问题ES5 ES6

發布時間:2024/9/19 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言块级作用域_块级作用域问题ES5 ES6 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ES5:

1.? 沒有塊級作用域

在其他類C語言中,由花括號封閉的代碼塊都有自己的作用域(如果用ECMAScript的話來說,就是它們自己的執行環境),

所以支持根據條件來定義變量。

if(true){var color = 'blue';

}

console.log(color);//'blue'

這里是在一個if語句中定義了變量color。如果是在C、C++或Java中,color會在if語句執

行完畢后被銷毀。但在JavaScript中,if語句中的變量聲明會將變量添加到當前的執行環境(在這里是

全局環境)中。在使用for語句時,尤其要牢記這一差異,例如:

for(var i=0; i < 10; i++){

doSomething(i);

}

console.log(i);//10

2.? 使用var聲明的變量會自動被添加到最近的執行環境中。

//'use strict';

var a2 = 'Hera';functionaaa(){var a2 = 'Apollo'; //aaa函數作用域的a2,不會影響到全局作用域的a2,注意區分

functionbbb(){

a2= 'Diana'; //由于閉包,訪問的是調用aaa函數之后產生的局部函數執行環境中的a2變量。

a1= 'Medusa'; //沒有使用var聲明,在非嚴格模式下,當bbb函數調用之后,a1會被添加到全局環境。

//在嚴格模式下會直接報錯a1 is not defined

}

bbb();

console.log(a2);

}

aaa();

console.log(a2);//全局環境聲明的 a2 'Hera'

console.log(a1);//bbb函數被調用后,被添加到全局環境的a1變量

//嚴格模式時,在調用bbb時,a1 = 'Medusa'這一行就會報錯a1 is not defined

3.查詢標識符

在上一步中,bbb函數中a2 = 'Diana' ,就是一個查詢標識符的過程。a2沒有使用var聲明,向上一級aaa函數的作用域開始查詢,

查詢到了var a2? = 'Apollo'之后,再賦值,那么這個時候,aaa作用域的a2已然變成了 ‘Diana’。

需要注意的是,下面這個例子:

var color = "blue";functiongetColor(){var color = "red";returncolor;

}

console.log(getColor());//"red"

這種情況下,任何位于局部變量color的聲明之后的代碼,如果不使用window.color,都無法訪問全局color變量。

ES6:

1.var聲明與變量提升

使用var關鍵字聲明的變量,無論其實際聲明位置在何處,都會被視為聲明于所在函數的頂部(如果聲明不在任何函數內,

則視為在全局作用于的頂部)。這就是所謂的變量提升(hoisting)。為了說明變量提升的含義,見下列例子:

functiongetValue(condition) {if(condition){var value = "blue";//其他代碼

returnvalue;

}else{//value 在此處可訪問,值為 undefined

return null;

}//value 在此處可訪問,值為 undefined

}

如果你不太熟悉 JS ,或許會認為僅當 condition 的值為 true 時,變量 value 才會被創建。

但實際上,value 無論如何都會被創建。 JS 引擎在后臺對 getValue 函數進行了調整, 就像這樣:

functiongetValue(condition) {varvalue;if(condition) {

value= "blue";//其他代碼

returnvalue;

}else{return null;

}

}

value 變量的聲明被提升到了頂部,而初始化工作則保留在原處。這意味著在 else 分支內

value 變量也是可訪問的,此處它的值會是 undefined ,因為它并沒有被初始化。

那么其實之前的代碼可以寫成

varcolor;if(true){

color= 'blue';

}

console.log(color);//'blue'

vari;for(i=0; i < 10; i++){

doSomething(i);

}

console.log(i);//10

2.塊級聲明

塊級聲明也就是讓所聲明的變量在指定塊的作用域外無法訪問。

1.在一個函數內部

2.在一個代碼塊(由一對花括號包裹)內部

塊級作用域是很多類 C 語言的工作機制, ES6 引入塊級聲明,是為了給 JS 添加靈活性以及 與其他語言的一致性。

3.let聲明

還有需要注意的一點是,let并不影響閉包。

總結

以上是生活随笔為你收集整理的c语言块级作用域_块级作用域问题ES5 ES6的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。