关于let和const的变量声明

let a = 0;
    const obj = {
    	a:1,
    	b:function(){
    		console.log(this.a)
    	}
    }
    const obj1 = {a:2}
    const fun = obj.b
    fun()
    fun.apply(obj)
    fun.bind(obj1).apply(obj)
    const fun1 = fun.bind(obj1)
    new fun()
复制代码

解答:app

这道题的答案是 undefined,1,2。函数

我一开始拿到这道题的时候,感受应该是0,1,2,一看答案,仍是没有弄懂。ui

第一个undefined,让我陷入了思考。this

在我印象里,fun()里的this确定指向的是window,那么,a已经在window里啊,为啥不打印0spa

后来想起来,let和const声明的值,不绑定全局做用域。code

至于为何说let和const的值不绑定全局做用域呢,对象

let 和const 声明的时候,也会先出现变量提高,不过提高不是提高到Global的全局的变量对象里,而是在当前的代码段的做用域的Script里。而咱们常常说的全局变量,是Global对象。let和const提高了以后,就开始出现暂时性死区。直到该变量的let或者const声明的出现。ip

至于fun.bind(obj1).apply(obj)打印2的为他作用域

bind函数:在使用 bind() 了以后,会建立一个新的函数。而这个新函数的this,永远指向bind的第一个参数,无论之后调用多少次,this都指向bind的第一个参数。io

相关文章
相关标签/搜索