JS閉包中的this問題

2021-08-22 18:08:02 字數 1172 閱讀 1060

首先看一段**:

var obj=;

}}var c=obj.get();

console.log(c);

那麼輸出c的值為多少呢?看下圖:

這說明obj.get()只是返回乙個匿名函式,並沒有執行。

所以轉到this,相應的**為:

var name="ss";

var obj=;

}}var val=obj.get();

console.log(val);

相應的輸出為:

要執行該匿名函式,就應將console.log(c)改為console.log(c())

轉到this,當改為輸出val)時,匿名函式執行,那麼這時候this.name的值應該是多少呢?·

this的指向是由它所在函式呼叫的上下文決定的,而不是由它所在函式定義的上下文決定的。

所以在這個時候,val相當於只是獲取了匿名函式,obj.get()相當於定義了的意思,val()才是執行了匿名函式,而val所處的上下文環境裡,this是指向全域性變數的。所以輸出應為"ss"

要想this.name輸出:"rr",則需要引入乙個that,**如下:

var name="ss";

var obj=;

}} var val=obj.get();

console.log(val());

執行結果:

JS閉包問題

因為你需要在事件內使用事件外的迴圈變數i。你的迴圈中只是為元素繫結事件,這時事件並沒有觸發執行。等到事件觸發時,那個迴圈早已經結束了,那時的i的值已經是迴圈最大值加1了。所以需要用一些方式儲存住當前迴圈的i的值。方案1為 用閉包儲存住當前迴圈的i的值。for var i 0 i i 方案2為 用le...

js的閉包問題

首先我們需要了解閉包,了解閉包就要了解全域性變數和區域性變數。在之前的js相關部落格中,已經提到過全域性變數和區域性變數。全域性變數是在整個js的作用範圍,還要了解在定義全域性變數時,它前面的關鍵字是可以省略的。而區域性變數作用範圍只是在當前的作用域。我們在呼叫區域性變數時要使用到return語句,...

js 中的閉包

先理解 js 中的執行環境 閉包按中文的意思就是關上乙個包的意思。如果我們把函式的變數物件當做是乙個包的話,那這個詞很形象體現了它的作用 函式被呼叫時會建立它的執行環境,函式語句執行完後程式會自動銷毀這個函式的執行環境,但是當乙個函式中宣告了另乙個函式 子函式 並且如果存在對這個子函式引用,就會形成...