lexically scoped 詞法作用域
參考:https://www.bbsmax.com/A/qVdeaD1bdP/
JavaScript第一點(diǎn)與C不同的是變量的作用范圍励背。我們都知道,C風(fēng)格的編程語言中,變量的作用范圍是兩個(gè)大括號(hào)之間,變量在兩個(gè)大括號(hào)之外是不可見的庭猩,我們稱之為Block Scope飒焦。
而JavaScript則不然 - 變量在真?zhèn)€函數(shù)內(nèi)以及此函數(shù)的內(nèi)嵌函數(shù)中均可見因妇,我們稱之為Function Scope董朝。比如:
function test(o){
var i = 0;
if (typeof o == "object"){
var j = 0;
for (var k = 0; k < 10; k++){
console.log(k);
}
console.log(k); // k = 10, k雖然在for循環(huán)中定義腥例,可是在for循環(huán)之外的整個(gè)函數(shù)體依然可見燥筷。
}
console.log(j); // j =0 或者j = undefined,j雖然在if塊中聲明并定義院崇,可是它在整個(gè)函數(shù)體中依然可見肆氓。
}
- Hoisting
JavaScript變量的另外一個(gè)奇特的地方還在于,在一個(gè)函數(shù)體內(nèi)任何一個(gè)地方定義(defined)的變量底瓣,都被假定為其在函數(shù)的一開始處被定義(但是可能沒有初始化)谢揪。也就是說蕉陋,所有變量的定義都被"hoisted"(提升)到函數(shù)的開始處。比如下面這個(gè)例子:
var scope = "global";
function f(){
console.log(scope); // 輸出"undefined"拨扶,而不是"global"凳鬓,因?yàn)楸镜氐膕cope變量已經(jīng)生效,只是還沒有初始化患民。
var scope = "local"; // 在此處初始化缩举,但是其實(shí)已經(jīng)在函數(shù)的開始處被聲明了,因此上面的代碼輸出的是"undefined"
console.log(scope); //輸出"local"
}
總而言之匹颤,JavaScript是一個(gè)Lexically Scoped Language仅孩,即JavaScript是基于詞法作用域(lexically scoped)的,所以標(biāo)識(shí)符被固定在它們被定義的作用域而不是語法上或是其被調(diào)用時(shí)的作用域印蓖。
大勢(shì)
靜態(tài)語言
優(yōu)點(diǎn):其結(jié)構(gòu)非常規(guī)范辽慕,便于調(diào)試,方便類型安全
缺點(diǎn):為此需要寫更多的類型相關(guān)代碼赦肃,導(dǎo)致不便于閱讀溅蛉、不清晰明了
在今天這個(gè)信息泛濫的時(shí)代,身為開發(fā)者他宛,眼光比技術(shù)更重要船侧。缺乏眼光的人,著眼于小厅各,為細(xì)枝末節(jié)的所謂“創(chuàng)新”不惜肝腦涂地镜撩,赴湯蹈火,而面臨真正變革時(shí)讯检,或坐井觀天,守舊拒新卫旱,或畏畏縮縮人灼,裹足不前。具備眼光的人顾翼,著眼于大投放,平時(shí)穩(wěn)扎穩(wěn)打,不為世間紛擾所擾适贸,一旦時(shí)機(jī)出現(xiàn)灸芳,則能拋卻門戶之見,枝節(jié)之爭(zhēng)拜姿,以過人氣概投身變革烙样,成就自己的事業(yè)。這前后兩者的差距之大蕊肥,其實(shí)全在于對(duì)大趨勢(shì)的把握上谒获。
當(dāng)關(guān)系數(shù)據(jù)庫和SQL語言把數(shù)據(jù)管理的繁瑣工作從開發(fā)者和操作者身上解放出來的時(shí)候,有人抨擊關(guān)系數(shù)據(jù)庫性能低下;當(dāng)微軟開始用C語言開發(fā)PC應(yīng)用程序時(shí)批狱,匯編語言的擁護(hù)者輕蔑的說裸准,只有匯編語言才能發(fā)揮PC機(jī)的全部能力;當(dāng)Web進(jìn)軍企業(yè)計(jì)算時(shí)赔硫,一大批專家跑出來抨擊HTML界面的呆板和HTTP協(xié)議的緩慢和幼稚炒俱。然而,所有這一切抱怨爪膊、質(zhì)疑和信誓旦旦的否定权悟,都被技術(shù)發(fā)展的大潮無情的吞噬,消失得無影無蹤惊完。
原因很簡(jiǎn)單僵芹,所有這些聲音,都是著眼于小小槐,著眼于私拇派,一葉障目,而不見IT技術(shù)發(fā)展的大勢(shì)凿跳。IT技術(shù)發(fā)展的大趨勢(shì)永遠(yuǎn)都是要更快件豌,更簡(jiǎn)單。
———————————————
原文鏈接:https://blog.csdn.net/yueyueniaolzp/java/article/details/80363758
Null-aware operators
Null-aware operators in Dart help resolve this issue. They’re basically ways to say,
“If this object or value is null, then forget about it: just cut out here, but don’t throw
an error.”
Finally, Dart is sane, and a condition must evaluate to a Boolean
判斷條件必須為布爾值