【JavaScript】作用域提升面试题(详解)

废话少说直接上例子:

案例一:

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

猜你喜欢

转载自blog.csdn.net/qq_49002903/article/details/124135110
今日推荐