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