JS中閉包 函式與物件的介紹和用法

2022-03-31 07:13:06 字數 2399 閱讀 5838

閉包

閉包概念:當乙個內部函式被呼叫,就會形成閉包,閉包就是能夠讀取其他函式內部變數的函式,定義在乙個函式內部的函,建立乙個閉包環境,讓返回的這個子程式抓住i,以便在後續執行時可以保持對這個i的引用。

內部函式比外部函式有更長的生命週期;函式可以訪問它被建立時所處的上下文環境。

如:頁面中有10個div,迴圈繫結每個div的點選事件

var divs=document.getelementsbytagname("div");

for (var i=0;i執行結果:10

因為點選事件的函式內部使用外部的變數i一直在變化,當我們指定click事件時並沒有儲存i的副本,這樣做也是為了提高效能,但達不到我們的目的,我們要讓他執行的上下文儲存i的副本,這種機制就是閉包。

修改**:

var divs=document.getelementsbytagname("div");

for (var i=0;in是外部函式的值,但是內部函式(點選事件)需要使用,返回函式前的n被臨時駐留在記憶體中給點選事件使用,簡單說就是函式的執行上下文被儲存起來,i生成了多個副本。

物件1、物件常量

物件的定義

//空物件

var obj1={};

//物件中的屬性

var obj2=;

var obj3=;

//物件中的方法

var obj4=

}

物件中可包含的內容:

物件常量可以出現在任何允許表示式出現的地方,物件、陣列、函式可以相互間巢狀,形式可以多種多樣。物件的值可以是:陣列,函式,物件,基本資料型別等。

//物件中可包含的內容

var obj5 = [, }, //物件

show:function()

}];//物件中的this是動態的,指向的是:呼叫者

obj5[1].show();

2、物件取值

方法一:直接使用點號運算

//3取值

var obj6=;

console.log(obj6.realname);

name); 錯誤

方法二:使用索引器,當物件中的key有空格是

//3取值

var obj6=;

console.log(obj6["realname"]);

console.log(obj6["nick name"]);

3、物件列舉(遍歷)

var obj7=;        

for (var key in obj7)

4、物件更新與新增

如果物件中存在屬性就修改對應值,如果不存在就新增。物件通過引用傳遞,它們永遠不會被複製

var obj8=;

obj8.realname="queen"; //修改

obj8.weight=1000; //新增屬性

obj8.show=function() //新增方法

obj8.show();

輸出:queen,1000

5、物件封裝

使用物件封裝的好處是可以減少全域性變數的汙染機會,將屬性,函式都隸屬乙個物件。

封裝前:

var name="foo";   //name是全域性的,被暴露

i=1; //全域性的,沒有var關鍵字宣告的變數是全域性的,與位置關係不大

function show()

//i是全域性的 2

show();

//3show();

封裝後:

//對外只暴露bar,使用閉包封裝

var bar=function()

};};

var bar1=bar();

//2bar1.show();

//3bar1.show();

var bar2=bar();

//2,因為被封裝,且閉包,i是區域性私有的

bar2.show();

函式

1、引數物件 (arguments)

第乙個函式中有乙個預設物件叫arguments,類似陣列,但不是陣列,該物件是傳遞給函式的引數

function counter()

}//通過new關鍵字呼叫建構函式,建立乙個物件tom

var rose=new student("rose",18);

var jack=new student("jack",20);

rose.show();

jack.show();

結果:rose,18

jack,20

JS函式與閉包

用簡潔的語法表達函式,箭頭函式不能使用arguments super new.target,沒有prototype屬性 函式名 引數 內部屬性和方法 函式名是乙個位址,指向函式。name屬性包含該函式的名稱 引數在內部表現為乙個陣列,所以呼叫時引數不受數量和種類的約束。沒有過載。可以在非箭頭函式內部...

函式物件與閉包

函式物件指的是函式可以被當做 資料 來處理 1.函式可以被引用 def add x,y return x y func add func 1,2 32.函式可以當做引數傳遞 def foo x,y,func return func x,y foo 1,2,add 33.函式可以當做返回值使用 傳參的...

Python中的函式物件與閉包

函式在python中是第一類物件,可以當做引數傳遞給其他函式,放在資料結構中,以及作為函式的返回結果。下面的例子為接受另外乙個函式作為輸入並呼叫它 1 foo.py 2def callf func 3return func 使用上面的函式 1 import foo2 defhelloworld 3r...