摘要:函數(shù)體創(chuàng)建一個(gè)函數(shù)并將它賦值給變量創(chuàng)建的函數(shù)叫做匿名函數(shù)因?yàn)殛P(guān)鍵字后面沒(méi)有標(biāo)識(shí)符??梢允褂妹瘮?shù)表達(dá)式來(lái)達(dá)到相同的結(jié)果。不過(guò)匿名函數(shù)的執(zhí)行環(huán)境具有全局性,因此其對(duì)象通常指向如果在通過(guò)或改變函數(shù)執(zhí)行環(huán)境的情況下,就會(huì)指向其它對(duì)象。
函數(shù)表達(dá)式
函數(shù)表達(dá)式是JavaScript中的一個(gè)既強(qiáng)大又容易令人困惑的特性。
定義函數(shù)表達(dá)式的方法1.函數(shù)聲明
function functionName(arg0,arg1,arg2){ //函數(shù)體 }
先有function關(guān)鍵字,然后是函數(shù)的名字,就是指定函數(shù)名的方式。他還有一個(gè)重要特征就是函數(shù)聲明提升意思是在執(zhí)行代碼之前會(huì)先讀取函數(shù)聲明。(意味可以將函數(shù)聲明放在調(diào)用它的語(yǔ)句后面)如下:
sayHi() function sayHi(){ alert("Hi!"); }
2.函數(shù)表達(dá)式
函數(shù)表達(dá)式有幾種不同的語(yǔ)法形式,下面是最常見(jiàn)的一種。
var functionName=function(arg0,arg1,arg2){ //函數(shù)體 }
創(chuàng)建一個(gè)函數(shù)并將它賦值給變量functionName,創(chuàng)建的函數(shù)叫做匿名函數(shù),因?yàn)閒unction關(guān)鍵字后面沒(méi)有標(biāo)識(shí)符。(匿名函數(shù)也叫做拉姆達(dá)函數(shù)) 匿名函數(shù)的name屬性是空字符串。
遞歸遞歸函數(shù)是在一個(gè)函數(shù)通過(guò)名字調(diào)用自身的情況下構(gòu)成的如下:
function factorial(num){ if(num<=1){ return 1; }else{ return num*factorial(num-1); } }
1.arguments.callee是一個(gè)指向正在執(zhí)行的函數(shù)的指針,因此可以用來(lái)實(shí)現(xiàn)對(duì)
函數(shù)的遞歸調(diào)用如下:
function factorial(num){ if(num<=1){ return 1; }else{ return num*arguments.callee(num-1); } }
用arguments.callee代替函數(shù)名,可以確保無(wú)論怎樣調(diào)用函數(shù)都不會(huì)出問(wèn)題。但是在嚴(yán)格模式下訪問(wèn)arguments.callee屬性會(huì)出錯(cuò)??梢允褂妹瘮?shù)表達(dá)式來(lái)達(dá)到相同的結(jié)果。如下:
var factorial=(function f(num){ if(num<=1){ return 1; }else{ return num*f(num-1); } }
這種方式在嚴(yán)格模式和非嚴(yán)格模式都可以使用。
閉包閉包是指有權(quán)訪問(wèn)另一個(gè)函數(shù)作用域的變量的函數(shù),創(chuàng)建閉包的常見(jiàn)方式,就是在一個(gè)函數(shù)內(nèi)部創(chuàng)建另一個(gè)函數(shù)。如下:
function init(){ var name="Mike"; function displayName(){ alert(name); } displayName(); } init()
init()函數(shù)創(chuàng)建了一個(gè)局部變量name和一個(gè)名為displayName()的函數(shù)。displayName()函數(shù)是定義在init()里面的內(nèi)部函數(shù),僅在該函數(shù)體內(nèi)使用。
displayName()沒(méi)有自己的局部變量,然而它可以訪問(wèn)到外部函數(shù)的變量,所以displayName()可以使用父函數(shù)init()中聲明的變量name。
注意:由于閉包會(huì)攜帶它的函數(shù)作用域,因此會(huì)比其它函數(shù)占用更多內(nèi)存。過(guò)度使用閉包可能會(huì)導(dǎo)致內(nèi)存占用過(guò)多。this
在全局函數(shù)中,this等于window,而當(dāng)函數(shù)作為某個(gè)對(duì)象的方法調(diào)用時(shí),this等于那個(gè)對(duì)象。不過(guò)匿名函數(shù)的執(zhí)行環(huán)境具有全局性,因此其this對(duì)象通常指向window
如果在通過(guò)call()或apply()改變函數(shù)執(zhí)行環(huán)境的情況下,this就會(huì)指向其它對(duì)象。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/105196.html
摘要:然而,雖然先生對(duì)無(wú)所不知,被譽(yù)為世界的愛(ài)因斯坦,但他的語(yǔ)言精粹并不適合初學(xué)者學(xué)習(xí)。即便如此,在后面我還是會(huì)建議把當(dāng)做補(bǔ)充的學(xué)習(xí)資源。但目前為止,依然是學(xué)習(xí)編程的好幫手。周正則表達(dá)式,對(duì)象,事件,閱讀權(quán)威指南第,,,章。 既然你找到這篇文章來(lái),說(shuō)明你是真心想學(xué)好JavaScript的。你沒(méi)有想錯(cuò),當(dāng)今如果要開(kāi)發(fā)現(xiàn)代網(wǎng)站或web應(yīng)用(包括互聯(lián)網(wǎng)創(chuàng)業(yè)),都要學(xué)會(huì)JavaScript。而面對(duì)泛...
摘要:原文鏈接恰當(dāng)?shù)貙W(xué)習(xí)適合第一次編程和非的程序員持續(xù)時(shí)間到周前提無(wú)需編程經(jīng)驗(yàn)繼續(xù)下面的課程。如果你沒(méi)有足夠的時(shí)間在周內(nèi)完成全部的章節(jié),學(xué)習(xí)時(shí)間盡力不要超過(guò)周。你還不是一個(gè)絕地武士,必須持續(xù)使用你最新學(xué)到的知識(shí)和技能,盡可能地經(jīng)常持續(xù)學(xué)習(xí)和提高。 原文鏈接:How to Learn JavaScript Properly 恰當(dāng)?shù)貙W(xué)習(xí) JavaScript (適合第一次編程和非 JavaSc...
摘要:定義函數(shù)表達(dá)式的方式有兩種函數(shù)聲明。不過(guò),這并不是匿名函數(shù)唯一的用途。可以使用命名函數(shù)表達(dá)式來(lái)達(dá)成相同的結(jié)果閉包匿名函數(shù)和閉包是兩個(gè)概念,容易混淆。匿名函數(shù)的執(zhí)行環(huán)境具有全局性,因此其對(duì)象通常指向通過(guò)改變函數(shù)的執(zhí)行環(huán)境的情況除外。 定義函數(shù)表達(dá)式的方式有兩種: 函數(shù)聲明。它的重要特征就是 函數(shù)聲明提升(function declaration hoisting) 即在執(zhí)行代碼之前會(huì)...
摘要:具體說(shuō)就是執(zhí)行流進(jìn)入下列任何一個(gè)語(yǔ)句時(shí),作用域鏈就會(huì)得到加長(zhǎng)語(yǔ)句的塊。如果局部環(huán)境中存在著同名的標(biāo)識(shí)符,就不會(huì)使用位于父環(huán)境中的標(biāo)識(shí)符訪問(wèn)局部變量要比訪問(wèn)全局變量更快,因?yàn)椴挥孟蛏纤阉髯饔糜蜴湣? 基本類型和引用類型的值 ECMAscript變量包含 基本類型值和引用類型值 基本類型值值的是基本數(shù)據(jù)類型:Undefined, Null, Boolean, Number, String ...
摘要:我在寫(xiě)作的過(guò)程中,給自己提了一個(gè)要求盡量深入淺出,條理清晰。至于是否達(dá)到了,希望讀者們多多批評(píng)指正,并給我提意見(jiàn)和建議。第章介紹中的函數(shù)式編程,包括匿名函數(shù)閉包和裝飾器等。第章介紹使用處理進(jìn)程線程和協(xié)程。 showImg(https://segmentfault.com/img/remote/1460000007990784?w=268&h=385); 在學(xué)習(xí)和使用 Python 的過(guò)...
閱讀 2553·2023-04-26 00:57
閱讀 923·2021-11-25 09:43
閱讀 2228·2021-11-11 16:55
閱讀 2240·2019-08-30 15:53
閱讀 3603·2019-08-30 15:52
閱讀 1471·2019-08-30 14:10
閱讀 3388·2019-08-30 13:22
閱讀 1220·2019-08-29 11:18