JS閉包問題求解,js閉包的問題。

時間 2021-08-30 09:08:44

1樓:匿名使用者

getnamefunc是物件object的內部方法,所有this=object//你怎麼可以用object做變數的?

第二個方法(getnamefunc()返回了一個函式)你並沒有繫結上下文,就放到window這個物件中了,號稱全域性變數

如果這樣

var o=

o.fun=objectx.getnamefunc()o.fun()//繫結一個上下文

js閉包的問題。

2樓:碼路行者

1、js沒有塊級作用域,定義的i變數屬於函式n中的變數,在函式n中可以訪問到;

2、函式n中主要涉及兩個執行環境: arr中儲存的函式中的區域性環境,函式n的區域性環境。相應的作用域鏈為:

arr中的函式的變數物件->函式n的變數物件。arr中的函式在執行時,作用域鏈向上查詢,自身的變數物件中沒有i這個變數,繼續向上查詢函式n的變數物件,而在經歷三次迴圈後,此時i的值已經是3,所以值為3.

3、如果要讓i為相應的數值,應該延長作用域鏈,使用匿名函式構造塊級作用域,方法如下:

function n()

})(i);

}return arr;

}var funs = n();

funs[0]();

funs[1]();

funs[2]();

js閉包問題,求大神解答! 100

3樓:春風化雨

//首先你的**等價於下面的**

function getfuns() ;

i = 1;

funs[i] = function() ;

i = 2;

funs[i] = function() ;

i = 3;

return funs;

}var arr = getfuns();

arr[0]();

arr[1]();

arr[2]();

//無論哪呼叫function();這個函式,那個i都只有那一份,//雖然i的作用域在getfuns裡面,但當你在外面用這種方式間接使用到i時,

//它的生命週期被延長。

//這樣輸出2 2 2

function getfuns() ;

}return funs;

}var arr = getfuns();

arr[0]();

arr[1]();

arr[2]();

//這樣就可以輸出0 1 2

function getfuns() ;

}return funs;

}var arr = getfuns();

arr[0]();

arr[1]();

arr[2]();

//這樣也可以輸出0 1 2

function getfuns() ;

})(i);

}return funs;

}var arr = getfuns();

arr[0]();

arr[1]();

arr[2]();//

4樓:啊桂讀書

你後面執行的三個函式,都是:function();

而當你執行時,i都是3,所以結果就這樣了。

js閉包問題,求大神解答,js閉包問題,求大神解答!

春風化雨 首先你的 等價於下面的 function getfuns i 1 funs i function i 2 funs i function i 3 return funs var arr getfuns arr 0 arr 1 arr 2 無論哪呼叫function 這個函式,那個i都只有那...

js中閉包是什麼意思,有什麼作用,最好舉例說明啊

司馬唐遷 e是事件,在firefox中只能在事件現場使用window.event,所以只有把event傳給函式使用。為了相容ff和其它瀏覽器,一般會在函式裡重新給e賦值 e window.event e 也就是說,如果window.event存在,則該瀏覽器支援直接使用window.event,否在...

js動態獲取id的問題,js獲取div的id值的問題

千鋒教育 html規則要求id名稱不能相同,會衝突的。如果你要選擇多個物件要用tag或者class。不要使用id屬性。常用的dom方法有 getelementsbyclassnamegetelementsbytagname getelementsbyclassname有時候會失靈,所以,getele...