变量提升中的面试题(闭包,私有作用域)

更多此变量提升类型文章:变量提升题目各种类型汇总目录

题目

var n = 0
function a() {
    var n = 10
    function b() {
        n++
        console.log(n)
    }
    b()
    return b
}

var c = a()
c()
console.log(n)

打印结果

11
12
0

分析

var n = 0
function a() {
    //私有作用域, var n ,function b(){}
    var n = 10
    function b() {
        n++ //操作自己上级的作用域,不操作全局
        console.log(n)
    }
    b()
    return b
}
var c = a()
c()//相当于调用b函数
console.log(n)//全局变量不受影响,function a操作的是`var n = 10`这里的私有变量


//变量提升
//var n ; var c ; function a (){}

私有作用域的变量提升

var foo = 1
function bar (){
    if(!foo){
        var foo = 10
    }
    console.log(foo)
}
bar()


// 打印结果
//10


分析:
变量提升 var foo ; function bar (){}
bar()私有作用域内:变量提升 var foo,此时的foo为undefined,!foo为true,符合条件
foo = 10 结果打印 10

更多此变量提升类型文章:变量提升题目各种类型汇总目录

在这里插入图片描述

你可能感兴趣的:(JavaScript,面试题)