關於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

相關文章
相關標籤/搜索