美文网首页
2021-08-27

2021-08-27

作者: 隔壁老王z | 来源:发表于2021-08-29 11:04 被阅读0次
// 写法1
function foo() {
    var a = 1
    function bar() {
        debugger
        console.log(a)
    }
    return bar
}
var func = foo()
func()

// 写法2
function foo() {
    var a = 1
    function bar() {
        debugger
        console.log(a)
    }
    bar()
}
foo()

// 写法3
function foo() {
    var a = 1
    bar()
}
function bar() {
    debugger
    console.log(a)
}
foo()
写法1作用域和调用栈 写法2作用域,调用栈和1不一样 写法3作用域找不到a变量,会报错
1、可以看到1和2写法都会存在闭包
2、2和3的写法只是bar函数定义的位置不一样,为什么3会报错2不会呢?
实际上是因为JS代码在执行之前会有预编译阶段,在预编译函数时会创建AO活动对象(实际就是说明在函数体内哪些变量&函数可用,如:AO = { this, argunments, b: function () {}, c: undefined })
预编译阶段发生变量声明和函数声明,没有初始化行为(赋值),匿名函数不参与预编译 ; 只有在解释执行阶段才会进行变量初始化 ;

在3中,预编译阶段AO中是没有发现变量a的,所以执行的时候会报错。

相关文章

  • 2021-08-27

    隔山送友 2021-08-27 初升的太阳,给大地洒满了金色,我踏着斑驳的树影,同时...

  • 自信、勇敢、担当

    日记905篇 2021-08-27 一个热情、自信、激情、有冲劲的我,这几年被我弄丢了。通过课程,找到了真我。20...

  • 【餐饮100问】84、如何提高业绩指标?

    D318 2021-08-27 1、首先来看业绩指标中,收入的计算公式 收入=人数×人均(根据业态,也可以是桌数×...

  • #Dairy291 (*•̀ᴗ•́*)و̑̑还不错

    2021-08-27 晴 周四 今天很神奇的七点多自然醒了,虽然还继续赖着床但是起床时间是正常范围。还清晰地记着醒...

  • 2021-08-27

    孙俪的《理想之城》,让我再一次看到了孙俪的理想主义现实… 原创2021-08-27 17:24·夏说而已[http...

  • 2021-08-27

    让自己每天坚持写作,但说实话不知写什么,没有目标,而且时间管理这块做的不太好,每天都很晚睡觉,早上很早起床,白天的...

  • 2021-08-27

    支气管哮喘又犯了,昨晚几乎没怎么睡觉,这个病是从小就有的疾病。这三十年以来,几乎年年如此,应该说已经习惯了。也许因...

  • 2021-08-27

    烟波江上觅诗魂 ——杜甫株洲遗踪吟感八首 李拯平(湖南株洲) 唐大历四年(公元769年)春,杜甫举家由蜀南征,因爱...

  • 2021-08-27

    我用文字编织了一场梦美好的云朵交织晚霞我给你织起毛衣待天边的晚霞都被用尽那场梦就会苏醒我又会悄悄的给你以佳美的梦幻...

  • 2021-08-27

    昨天三件事回顾 1、《ABC》左右手能够顺利弹奏下来,练习时间不少于半小时——练满半个小时,但是还是没有太流畅 2...

网友评论

      本文标题:2021-08-27

      本文链接:https://www.haomeiwen.com/subject/apgmiltx.html