美文网首页web前端
块级作用域的坑

块级作用域的坑

作者: 姜治宇 | 来源:发表于2020-04-26 21:18 被阅读0次

先来看一段代码:

let color = 'green'
let obj = {
    color: 'yellow',
    getColor: () => {
        console.log(this)//指向了window
        console.log(this.color)
    },

}

obj.getColor()//undefined

我们知道,箭头函数是没有this的,它会将this指向到外部作用域,也就是window。但是,为什么无法打印出green,而是undefined呢?
注意,let其实相当于这么写:

var color = 'blue'
{
    let color = 'green'

    setTimeout(function(){
        console.log(this.color)
    },0)
}

let声明的变量color,到了块级作用域之外就被gc回收掉了,而定时器延迟执行回调函数打印的this,就指向了最外层的window了。

相关文章

  • js 作用域

    js 作用域主要有:全局作用域和局部作用域,es5之前没有块级作用域,es6有了块级作用域 何为块级作用域,块级作...

  • let、const和var的区别(个人笔记)

    1. 区别 (1)块级作用域块作用域由{ }包括,let和const具有块级作用域,var不存在块级作用域。块级作...

  • let,var和const

    var没有块级作用域,只有方法作用域常见的块级作用域,if(){}。for(){}。

  • 第七章 块级作用域、私有变量

    模仿块级作用域 私有变量  js没有块级作用域,只有全局作用域和局部作用域(函数作用域),块级作用域是指某一部分代...

  • js高级知识点(第五天)

    所用域 什么是作用域 变量起作用的范围 什么是块级作用域,使用代码块限定的作用域是块级作用域(let声明的变量是块...

  • 你真的懂let和const吗?

    块级作用域 在ES6之前我们脑海里应该只存在全局作用域和函数级作用域,没有块级作用域。那么为什么要引入块级作用域呢...

  • ES6->块级作用域

    块级作用域 为什么需要块级作用域? ES5 只有全局作用域和函数作用域,没有块级作用域,这带来很多不合理的场景。第...

  • 块级作用域的坑

    先来看一段代码: 我们知道,箭头函数是没有this的,它会将this指向到外部作用域,也就是window。但是,为...

  • es6新增特性

    一、变量的改变 let 用来声明变量(块级作用域) const 用来表示常量(块级作用域) 块级作用域 就是在{}...

  • js声明提升

    块级作用域块级作用域是指花括号内的每一段代码都具有各自的作用域,而javascript没有块级作用域。javasc...

网友评论

    本文标题:块级作用域的坑

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