JavaScript高級(jí)程序設(shè)計(jì) 讀書筆記之八 Function類及閉包
更新時(shí)間:2012年02月27日 23:48:59 作者:
Function類及閉包,學(xué)習(xí)js的朋友可以參考下
Function類
定義
Function類可以表示開發(fā)者定義的任何函數(shù),用Function類直接創(chuàng)建函數(shù)的語(yǔ)法如下:
var function_name=new Function(agrument1,agrument2,...,argumentN,function_body);
每個(gè)argument都是一個(gè)參數(shù),最后一個(gè)參數(shù)是函數(shù)主體(要執(zhí)行的代碼)。
示例:
function sayHi(sName,sMessage){
alert("Hello "+sName+","+sMessage);
}
還可以如下定義它:
var sayHi=new Function("sName","sMessage","alert(\"Hello\"+sName+\",\"+sMessage);");
注:盡管可用Function構(gòu)造函數(shù)創(chuàng)建函數(shù),但最好不要使用它,因?yàn)橛盟x函數(shù)比用傳統(tǒng)方式要慢得多。不過(guò),所有函數(shù)都應(yīng)看作是Function類的實(shí)例。
屬性和方法
因?yàn)楹瘮?shù)是引用類型,所以它們也有屬性和方法,ECMAScript定義的屬性length聲明了函數(shù)期望的參數(shù)個(gè)數(shù),例如:
function doAdd(iNum){
alert(iNum+10);
}
function sayHi(){
alert("Hi");
}
alert(doAdd.length);//outpus 1
alert(sayHi.length);//outpus 0
Function對(duì)象也有與所有對(duì)象共享的標(biāo)準(zhǔn)valueOf()方法和toString()方法,這兩個(gè)方法返回的都是函數(shù)的源代碼,在調(diào)試時(shí)尤其有用。
例如:
function doAdd(iNum){
alert(iNum+10);
}
alert(doAdd.toString());
這段代碼輸出了doAdd()函數(shù)的文本。
閉包
定義
所謂閉包,是指詞法表示包括不必計(jì)算的變量的函數(shù),也就是說(shuō),該函數(shù)能使用函數(shù)外定義的變量。在ECMAScript中使用全局變量是一個(gè)簡(jiǎn)單的閉包實(shí)例。
示例:
var sMessage="Hello World";
function sayHelloWold(){
alert(sMessage);
}
sayHelloWorld();
在一個(gè)函數(shù)中定義另一個(gè)函數(shù)會(huì)使閉包變得更復(fù)雜,如:
var iBaseNum=10;
function addNumbers(iNum1,iNum2){
function doAddtion(){
return iNum1+iNum2+iBaseNum;
}
return doAddtion();
}
這里函數(shù)addNumbers()包括函數(shù)doAddtion()(閉包)。內(nèi)部函數(shù)是個(gè)閉包,因?yàn)樗鼘@取外部函數(shù)的參數(shù)iNum1和iNum2以及全局變量iBaseNum的值。addNumbers()的最后一步調(diào)用了內(nèi)部函數(shù),把兩個(gè)參數(shù)和全局變量相加,并返回它們的和。這里要掌握的重要概念是doAddtion()函數(shù)根本不接受參數(shù),它使用的是從執(zhí)行環(huán)境中獲取的。
可以看到,閉包是ECMAScript中非常強(qiáng)大多用的一部分,可以用于執(zhí)行復(fù)雜的計(jì)算。就像使用任何高級(jí)函數(shù)一樣,在使用閉包時(shí)要當(dāng)心,因?yàn)樗鼈兛赡軙?huì)變得非常復(fù)雜。
本文示例代碼
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>《JavaScript高級(jí)程序設(shè)計(jì)》讀書筆記之八:Function類及閉包</title>
<script type="text/javascript">
function doAdd(iNum){
alert(iNum+10);
}
function sayHi(){
alert("Hi");
}
function lengthProperty(){
alert(doAdd.length);
alert(sayHi.length);
}
function valueOfMethod(){
alert(doAdd.valueOf());
}
function toStringMethod(){
alert(doAdd.toString());
}
var sMessage="Hello World";
function sayHelloWorld(){
alert(sMessage);
}
function demoOne(){
sayHelloWorld();
}
var iBaseNum=10;
function addNumbers(iNum1,iNum2){
function doAddtion(){
return iNum1+iNum2+iBaseNum;
}
return doAddtion();
}
function demoTwo(){
alert(addNumbers(1,2));
}
</script>
</head>
<body>
<h1>Length:</h1>
<input type="button" onclick="lengthProperty()" value="LengthProperty"/>
<h1>valueOf()/toString():</h1>
<input type="button" onclick="valueOfMethod()" value="ValueOfMethod"/>
<input type="button" onclick="toStringMethod()" value="ToStringMethod"/>
<h1>閉包:</h1>
<input type="button" onclick="demoOne()" value="Demo One"/>
<input type="button" onclick="demoTwo()" value="Demo Two"/>
</body>
定義
Function類可以表示開發(fā)者定義的任何函數(shù),用Function類直接創(chuàng)建函數(shù)的語(yǔ)法如下:
var function_name=new Function(agrument1,agrument2,...,argumentN,function_body);
每個(gè)argument都是一個(gè)參數(shù),最后一個(gè)參數(shù)是函數(shù)主體(要執(zhí)行的代碼)。
示例:
復(fù)制代碼 代碼如下:
function sayHi(sName,sMessage){
alert("Hello "+sName+","+sMessage);
}
還可以如下定義它:
var sayHi=new Function("sName","sMessage","alert(\"Hello\"+sName+\",\"+sMessage);");
注:盡管可用Function構(gòu)造函數(shù)創(chuàng)建函數(shù),但最好不要使用它,因?yàn)橛盟x函數(shù)比用傳統(tǒng)方式要慢得多。不過(guò),所有函數(shù)都應(yīng)看作是Function類的實(shí)例。
屬性和方法
因?yàn)楹瘮?shù)是引用類型,所以它們也有屬性和方法,ECMAScript定義的屬性length聲明了函數(shù)期望的參數(shù)個(gè)數(shù),例如:
復(fù)制代碼 代碼如下:
function doAdd(iNum){
alert(iNum+10);
}
function sayHi(){
alert("Hi");
}
alert(doAdd.length);//outpus 1
alert(sayHi.length);//outpus 0
Function對(duì)象也有與所有對(duì)象共享的標(biāo)準(zhǔn)valueOf()方法和toString()方法,這兩個(gè)方法返回的都是函數(shù)的源代碼,在調(diào)試時(shí)尤其有用。
例如:
復(fù)制代碼 代碼如下:
function doAdd(iNum){
alert(iNum+10);
}
alert(doAdd.toString());
這段代碼輸出了doAdd()函數(shù)的文本。
閉包
定義
所謂閉包,是指詞法表示包括不必計(jì)算的變量的函數(shù),也就是說(shuō),該函數(shù)能使用函數(shù)外定義的變量。在ECMAScript中使用全局變量是一個(gè)簡(jiǎn)單的閉包實(shí)例。
示例:
復(fù)制代碼 代碼如下:
var sMessage="Hello World";
function sayHelloWold(){
alert(sMessage);
}
sayHelloWorld();
在一個(gè)函數(shù)中定義另一個(gè)函數(shù)會(huì)使閉包變得更復(fù)雜,如:
復(fù)制代碼 代碼如下:
var iBaseNum=10;
function addNumbers(iNum1,iNum2){
function doAddtion(){
return iNum1+iNum2+iBaseNum;
}
return doAddtion();
}
這里函數(shù)addNumbers()包括函數(shù)doAddtion()(閉包)。內(nèi)部函數(shù)是個(gè)閉包,因?yàn)樗鼘@取外部函數(shù)的參數(shù)iNum1和iNum2以及全局變量iBaseNum的值。addNumbers()的最后一步調(diào)用了內(nèi)部函數(shù),把兩個(gè)參數(shù)和全局變量相加,并返回它們的和。這里要掌握的重要概念是doAddtion()函數(shù)根本不接受參數(shù),它使用的是從執(zhí)行環(huán)境中獲取的。
可以看到,閉包是ECMAScript中非常強(qiáng)大多用的一部分,可以用于執(zhí)行復(fù)雜的計(jì)算。就像使用任何高級(jí)函數(shù)一樣,在使用閉包時(shí)要當(dāng)心,因?yàn)樗鼈兛赡軙?huì)變得非常復(fù)雜。
本文示例代碼
復(fù)制代碼 代碼如下:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title>《JavaScript高級(jí)程序設(shè)計(jì)》讀書筆記之八:Function類及閉包</title>
<script type="text/javascript">
function doAdd(iNum){
alert(iNum+10);
}
function sayHi(){
alert("Hi");
}
function lengthProperty(){
alert(doAdd.length);
alert(sayHi.length);
}
function valueOfMethod(){
alert(doAdd.valueOf());
}
function toStringMethod(){
alert(doAdd.toString());
}
var sMessage="Hello World";
function sayHelloWorld(){
alert(sMessage);
}
function demoOne(){
sayHelloWorld();
}
var iBaseNum=10;
function addNumbers(iNum1,iNum2){
function doAddtion(){
return iNum1+iNum2+iBaseNum;
}
return doAddtion();
}
function demoTwo(){
alert(addNumbers(1,2));
}
</script>
</head>
<body>
<h1>Length:</h1>
<input type="button" onclick="lengthProperty()" value="LengthProperty"/>
<h1>valueOf()/toString():</h1>
<input type="button" onclick="valueOfMethod()" value="ValueOfMethod"/>
<input type="button" onclick="toStringMethod()" value="ToStringMethod"/>
<h1>閉包:</h1>
<input type="button" onclick="demoOne()" value="Demo One"/>
<input type="button" onclick="demoTwo()" value="Demo Two"/>
</body>
您可能感興趣的文章:
- javascript閉包的高級(jí)使用方法實(shí)例
- JavaScript自執(zhí)行閉包的小例子
- 深入Javascript函數(shù)、遞歸與閉包(執(zhí)行環(huán)境、變量對(duì)象與作用域鏈)使用詳解
- 談?wù)凧avaScript中的函數(shù)與閉包
- 深入理解JavaScript 閉包究竟是什么
- JavaScript中的作用域鏈和閉包
- javascript學(xué)習(xí)筆記(十三) js閉包介紹(轉(zhuǎn))
- Javascript 閉包引起的IE內(nèi)存泄露分析
- 深入理解JavaScript系列(16) 閉包(Closures)
- JavaScript 高級(jí)篇之閉包、模擬類,繼承(五)
- 用最通俗易懂的代碼幫助新手理解javascript閉包 推薦
- javaScript 利用閉包模擬對(duì)象的私有屬性
- JavaScript閉包 懂不懂由你反正我是懂了
- JavaScript 匿名函數(shù)(anonymous function)與閉包(closure)
- javascript的閉包介紹(司徒正美)
- javascript 閉包
- Javascript閉包演示代碼小結(jié)
- 基于javascript 閉包基礎(chǔ)分享
相關(guān)文章
javascript抽象工廠模式詳細(xì)說(shuō)明
這篇文章主要介紹了javascript抽象工廠模式詳細(xì)說(shuō)明,需要的朋友可以參考下2014-12-12微信小程序?qū)崿F(xiàn)可長(zhǎng)按移動(dòng)控件
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)可長(zhǎng)按移動(dòng)控件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-10-10Js實(shí)現(xiàn)無(wú)刷新刪除內(nèi)容
本文給大家分享的是一段仿騰訊微博的無(wú)刷新刪除特效的代碼,非常的實(shí)用,有需要的小伙伴可以參考下。2015-04-04JavaScript實(shí)現(xiàn)離開頁(yè)面前提示功能【附j(luò)Query實(shí)現(xiàn)方法】
這篇文章主要介紹了JavaScript實(shí)現(xiàn)離開頁(yè)面前提示功能,結(jié)合具體實(shí)例形式分析了javascript實(shí)現(xiàn)針對(duì)關(guān)閉頁(yè)面的事件響應(yīng)原理與操作技巧,并附帶jQuery的相應(yīng)實(shí)現(xiàn)方法,需要的朋友可以參考下2017-09-09注意 JavaScript 中 RegExp 對(duì)象的 test 方法
注意 JavaScript 中 RegExp 對(duì)象的 test 方法...2007-01-01JavaScript中Function函數(shù)與Object對(duì)象的關(guān)系
這篇文章主要介紹了JavaScript中Function函數(shù)與Object對(duì)象的關(guān)系的相關(guān)資料,需要的朋友可以參考下2015-12-12固定背景實(shí)現(xiàn)的背景滾動(dòng)特效示例分享
固定背景滾動(dòng)特效,使用background-attachment: fixed和導(dǎo)航菜單,頁(yè)面會(huì)非常平滑的滾動(dòng),感興趣的朋友可以參考下哈希望對(duì)你有所幫助2013-05-05