LEARNING JAVASCRIPT - Trang 149

const

f

=

(

function

() {

let

count

=

0

;

return

function

() {

return

`I have been called

${

++

count

}

time(s).`

;

}
})();

f

();

// "I have been called 1 time(s)."

f

();

// "I have been called 2 time(s)."

//...

Because the variable

count

is safely ensconced in the IIFE, there’s no way to tamper

with it:

f

will always have an accurate count of the number of times it’s been called.

While block-scoped variables in ES6 have somewhat reduced the need for IIFEs, they

are still quite commonly used, and are useful when you want to create a closure and

return something out of it.

Function Scope and Hoisting

Prior to ES6’s introduction of

let

, variables were declared with

var

and had some‐

thing called function scope (global variables declared with

var

, while not in an explicit

function, share the same behavior).
When you declare a variable with

let

, it doesn’t spring into existence until you

declare it. When you declare a variable with

var

, it’s available everywhere in the cur‐

rent scope…even before it’s declared. Before we see an example, remember that there’s

a difference between a variable being undeclared and a variable that has the value

undefined

. Undeclared variables will result in an error, whereas variables that exist

but have the value

undefined

will not:

let

var1

;

let

var2

=

undefined

;

var1

;

// undefined

var2

;

// undefined

undefinedVar

;

// ReferenceError: notDefined is not defined

With

let

, you will get an error if you try to use a variable before it’s been declared:

x

;

// ReferenceError: x is not defined

let

x

=

3

;

// we'll never get here -- the error stops execution

Variables declared with

var

, on the other hand, can be referenced before they’re

declared:

x

;

// undefined

var

x

=

3

;

x

;

// 3

So what’s going on here? On the surface, it doesn’t make sense that you should be able

to access a variable before it’s declared. Variables declared with

var

employ a mecha‐

Function Scope and Hoisting | 125

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.