4 回答

王益達(dá)
TA貢獻(xiàn)12條經(jīng)驗(yàn) 獲得超15個(gè)贊
樓上 @onemoo 關(guān)于作用域概念的解釋完全適用 JS,作用域可以指變量,也可以指函數(shù)。這里只做個(gè)擴(kuò)展補(bǔ)充:
在?C 語言中,在變量聲明的代碼塊之外是不可見的,通常稱為塊級作用域。例如:
#include void?main() { ??int?i?=?1; ??i--; ??if(i?==?0) ??{ ??????int?j?=?1; ??} ??printf("%d",?j); }
其中,變量??j 定義在 if 代碼塊中,外部無法訪問。
而 JavaScript 中,變量的作用域只有全局作用域和函數(shù)作用域,沒有 if 、for、while 塊級約束,外部可訪問,例如:
(function?()?{ ????var?i?==?1; ??i--; ??if(i?==?0) ??{ ??????var?j?=?1; ??} ??console.log(j); })(); console.log(j);
其中,變量? j 在 if 代碼塊外可以訪問,而在 function 代碼塊外不可訪問。
當(dāng)然,在 ES6 開始,新增了 let 聲明變量的方式,用法類似于 var,但是所聲明的變量只在 let 所在的代碼塊內(nèi)有效。let 實(shí)際上為 JavaScript 新增了塊級作用域。例如:
{ ??let?i?=?1; ??i--; ??if(i?==?0) ??{ ??????let?j?=?1; ??} ??console.log(j); }; console.log(i);
其中,變量 i 和 變量 j? 都不可被訪問。
點(diǎn)擊展開后面2條
添加回答
舉報(bào)
0/150
提交
取消