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