下面是變量範圍的一些基本規則在JavaScript:
- 如果與
var
關鍵字定義,變量是函數作用域。也就是說,該變量的範圍是最接近的包含函數,或者如果沒有包含函數,則該範圍包含在全局上下文中。 實施例:
// globally-scoped variable (no containing function)
var foo = 'bar';
function test() {
// function-scoped variable
var foo2 = 'bar2';
if (true) {
// still function-scoped variable, regardless of the if-block
var foo3 = 'bar3';
}
// see?
console.log(foo3); // --> 'bar3'
}
- 如果與關鍵字
let
(ES6 +)定義,則變量是塊範圍的(此行爲更類似於大多數其他C家族語法語言)。例如:
// error: top level "let" declarations aren't allowed
let foo = 'bar';
function test() {
// block-scoped variable (function are blocks, too)
let foo2 = 'bar2';
if (true) {
// block-scoped variable (notice the difference
// from the previous example?)
let foo3 = 'bar3';
}
// uh oh?
console.log(foo3); // --> ReferenceError: foo3 is not defined
}
- 如果既不與
var
或let
關鍵字(例如,foo = bar
)中所定義,則變量的作用域全局上下文。例如:
// globally-scoped variable
foo = 'bar';
function test() {
// also globally-scoped variable (no var or let declaration)
foo2 = 'bar2';
if (true) {
// still a globally-scoped variable
foo3 = 'bar3';
}
}
test();
console.log(foo, foo2, foo3); // 'bar', 'bar2', 'bar3'
在所有這些情況下,函數的變量的範圍內定義仍可以訪問變量本身(技術上講你創建一個封閉,作爲numOfLayers
和變量詞法範圍你的addToString
和doAllLayers
函數)。
請注意,範圍規則在技術上比這更細微一些,但是您最好在此處閱讀更深入的文章。
有什麼問題,代碼看起來很好。 – atinder
我不確定我是否正確理解,但是您不會在這裏傳遞任何字符串,thisLayer是您傳遞的對象。 – abs
@atinder - 我只需要更好地理解JavaScript中的範圍 –