javascript var 作用域

最近開始看 JavaScript 設計模式 這本書,裡面有一段說到,JS 只有函式變數跟全域變數,沒有我們平常認知的區域變數,JS 真的跟其他語言不太一樣。

以下面這面這個例子,在 Java 的話,name 應該是區域變數,後面的 function 呼叫 name 應該會有 error,但在 javascript 而言,它卻是全域變數。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
if(true){
var name = 'alincode';
}
console.log(name);

function test() {
console.log('=== function start ===');
var othername = 'ali';
console.log('global var:', name);
console.log('function var:', othername);
console.log('=== function end ===');
}
test();

// console.log('othername:', othername);
// output: ReferenceError: othername is not defined

output

1
2
3
4
5
alincode
=== function start ===
global var: alincode
function var: ali
=== function end ===