JS中的遮蔽效应
文章类型:Javascript
发布者:admin
发布时间:2022-07-24
一:遮蔽效应是什么
在多层的嵌套作用域中可以定义同名的标识符,作用域查找会向上查找,找到第一个匹配的标识符时停止
抛开遮蔽效应,作用域的查找始终是从运行的最内部作用域开始,逐级向外或者说向上进行,直到遇见第一个匹配标识符为止
说白一点,就是内部的标识符遮蔽住了外部的标识符
例子一
var val='global'
function bar(){
console.log(val) //undefined
var val='inner txt'
console.log(val) // inner txt
}
bar()
console.log(val) // global
例子二
var val='global'
function bar(){
console.log(val) // global
}
function foo(){
var val='inner txt2'
bar()
console.log(val) //inner txt2
}
foo()
console.log(val) // global<br/>
例子一val值为undefined?
这里会涉及到变量提升,在块级作用域中,变量会提升到顶部,声明而未赋值
例子二val为啥为全局值?
作用域的查找是,不管函数在哪个作用域中执行,而查找看的是定义时的作用域,虽然在foo内部执行,但是作用域跟foo是平行块的关系,说白了就是看函数定义时所在位置,而不是调用时