var

 

準備一範例

var ballName = "Baseball";
// code here can use ballName
function myFunction() {
    // code here can also use ballName
}

var i = 5;
for (var i = 0; i < 10; i++) {
    // some statements
}
// Here i is 10

// Block Scope
{
    let x = 2;
}

 

一、名詞解釋與特性

1、Global Scope

一 function 的外面則為 Global Scope。

當於 Global Scope 所宣告的變數,在 Function Scope 裡也可以存取得到的。

var ballName = "Baseball";
console.log(ballName);
function myFunction() {
    console.log(ballName);
}
myFunction();

 

2、Function Scope

一 function 的裡面則為 Function Scope。

在 Function Scope 裡所宣告的變數,於 Global scope 不能使用。

function myFunction() {
    var ballName = "Baseball";
    console.log(ballName);
}
myFunction();

// can't to accees function scope value
//console.log(ballName);

 

3、Loop Scope

一個 for loop 的裡面則為 Loop Scope。

Loop Scope 的特性比較像 Global Scope。

var i = 5;
for (var i = 0; i < 10; i++) {
    // some statements
}
// Here i is 10

因為數變 i 也算是 Global variable

for (var i = 0; i < 10; i++) {
    // some statements
}
// Here i is 10

 

4、Block Scope

一組 「{}」符號裡面則為 Block Scope。

在 ECMAScript 2015 以前(不包含 ECMAScript 2015),是沒有 Block Scope 這東西的。

 

二、Redeclaring Variables

在相同的 scope,var 所宣告的變數可以重新宣告。

var x = 1;
var x = 100;
console.log(x);
// final x just equal to 100

function Foo() {
    var x = 5;
    var x = 500;
    console.log(x);
    // final x just equal to 500
}
Foo();

但要注意的是,var 所宣告的變數,在 Block Scope 的是不分內外的。

var x = 1;
var x = 100;
console.log(x);

{
    var x = 5;
    var x = 500;
    console.log(x);
}
console.log(x);