废话少说直接上例子:
案例一:
var n = 100
function foo1 () {
n = 200
}
console.log(n) // 100 访问全局变量n
案例二:
function foo2 () {
console.log(n) // undefined 访问未定义的变量n
var n = 200
console.log(n) // 200
}
var n = 100
foo2()
案例三:
var n = 100
function foo3 () {
console.log(n) // 100 访问全局变量n
}
function foo4 () {
var n = 200
console.log(n) // 200 访问 foo4 函数内部的局部变量n
foo3()
}
foo4()
console.log(n) // 100
案例三的输出打印顺序为:200 100 100(最后的console.log(n))
案例四:
function foo5 () {
var a = b = 100
}
foo5()
console.log(b)
// console.log(a) 不注释会报错 error: a is not defined
var a = b = 100
此句可拆分为两句话:var a = 100 ; b = 100 ; 需要注意的是: b=100没有关键字var ,会默认提升为全局变量
案例五
var a = 100
function foo6 () {
console.log(a) //undefined
return
var a = 100
}
foo6()
var a = 100
function foo7 () {
console.log(a) //100
// return
// var a = 100
}
foo7()
foo6 与 foo7 对比可以看出注释return的语句就可以访问全局变量a
这里解释一个函数foo6的打印结果:虽然执行不到return的内容就打印了结果, 但是在foo6的函数中是有a这个变量的定义的,但是因为执行顺序的原因访问不到所以结果就为undefined