閉包
閉包概念:當乙個內部函式被呼叫,就會形成閉包,閉包就是能夠讀取其他函式內部變數的函式,定義在乙個函式內部的函,建立乙個閉包環境,讓返回的這個子程式抓住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...