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

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

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閉包的問題

碼路行者 1 js沒有塊級作用域,定義的i變數屬於函式n中的變數,在函式n中可以訪問到 2 函式n中主要涉及兩個執行環境 arr中儲存的函式中的區域性環境,函式n的區域性環境。相應的作用域鏈為 arr中的函式的變數物件 函式n的變數物件。arr中的函式在執行時,作用域鏈向上查詢,自身的變數物件中沒有...

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

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

js中刪除節點的問題

飛雲祥 你沒有操作對。div.childnodes.length 5 div.childnodes 3 才能選到 h1 元素標籤 div.removechild div.childnodes 3 加入想用div.childnodes 1 選中h1的話,html中的div需要如下寫,不要有換行,才可以...