背景介绍
js中作用域分为全局作用域和局部作用域,没有块级作用域。作用域就是变量与函数的可访问范围。
知识剖析
局部作用域只能在作用域内部访问到比如函数内的变量只能在函数内访问。 全局作用域可在script标签任何位置访问到变量。
示例
var name = '小红' // 小红是全局作用域
var age = 20
function test(){
var name = '小明' //小明是局部作用域
console.log(name) // 打印结果为小明
console.log(age) // 打印结果为20
}
test()
console.log(name) // 打印结果为小红
从例子上name变量可看出全局作用域的变量和局部作用域的变量并不冲突,全局作用域并不能访问到局部函数体内的name;但函数内可以拿到全局作用域的age。
如何声明全局与局部变量
js中不用val声明的变量都自动为全局作用域。
var name = '小红' // 小红是全局作用域
function test(){
var name = '小明' //小明是局部作用域
hobby = '篮球' // 局部没有用var声明的变量
console.log(name) // 小明
}
test()
console.log(name) // 打印结果为小红
console.log(hobby) // 打印结果为篮球
很明显函数内的变量hobby竟然在函数外访问到了。正常情况下局部作用域内的变量是不能被局部以外访问到的,因此验证了没有用var声明的变量都为全局变量。
作用域链
作用域是可以嵌套的,如果在作用域内访问不到目标变量,会一层一层向上查找。
var name = '小红'
tow()
function tow(){
var name = '小白'
three()
function three(){
var name = '小绿'
console.log(name) // 结果为小绿
}
}
}
one()
//-----------
var name = '小红'
tow()
function tow(){
var name = '小白'
three()
function three(){
console.log(name) // 结果为小白
}
}
}
one()
总结 看完自己把总结打到评论区,提高个人理解程度。