Javascript anonymous functions
Anonymous functions are functions that are dynamically declared at runtime. They’re called anonymous functions because they aren’t given a name in the same way as normal functions.
Anonymous functions are declared using the function operator instead of the function declaration.
命名函數:
function flyToTheMoon() { alert("Zoom! Zoom! Zoom!"); } flyToTheMoon();
匿名函數:
var flyToTheMoon = function() { alert("Zoom! Zoom! Zoom!"); } flyToTheMoon();Anonymous functions are created using the function operator
在JavaScript中創建函數最常用的有兩種方法:函數聲明和函數賦值表達式。匿名函數的創建使用的是函數賦值表達式。直接貼兩張圖,簡單明了:
函數聲明:
函數賦值表達式:
在調用函數賦值表達式(function operator)會創建一個新的函數對象,然后把返回它。這里就是把創建的函數對象賦值給flyToTheMoon。
這個賦值,跟把普通函數返回的值賦給變量是一樣的,比較特殊的就是匿名函數的值是一個函數對象而不是普通的如字符串或者時間這些變量。這可能是因為在JavaScript中函數就是一種特殊類型的對象,意味著你可以按操作其他對象一樣來操作它。它們能存儲在變量中,能作為參數傳遞給其它函數,也可以通過return語句從其它函數里返回。函數總是對象,無論你是怎么創建的。
Anonymous functions are created at runtimeAnonymous functions don’t have a nameThe function operator can be used anywhere that it’s valid to use an
expression. For example you can use the function operator when a
variable is being assigned, when a parameter is being passed to a
function or in a return statement. This is possible because the
function operator is always invoked at runtime.Function declarations are different. They are run before any of the
other code is executed so the functions do not have to be declared
before the code that calls them.Function declarations can’t be used to create anonymous functions
because they require the function to have a name. The function
declaration uses the function name to add it as a variable in the
current scope.
匿名函數沒有函數名,那怎么能調用呢?可以調用是因為函數名存的是一個函數對象,而不像普通變量。
函數聲明創建函數時,總是有一個函數名,還有一個有編譯器自動生成的和函數名的同名變量。
對于函數賦值表達式創建函數時,函數名是可選的。很多情況下,創建一個匿名函數時,函數名對我們來說是不重要的。就像這樣:
var flyToTheMoon = function() { alert("Zoom! Zoom! Zoom"); } flyToTheMoon();
不過使用函數賦值表達式也可以設置函數名,這個函數和上面這個函數一模一樣,只是多了個函數名而已:
var flyToTheMoon = function flyToTheMoon() { alert("Zoom! Zoom! Zoom"); } flyToTheMoon();
Giving your function a name does not automatically add a variable into scope with the function name. You still need to assign the return value of the function operator a variable.
上面這個例子中,函數名和存儲函數對象的變量名是一樣的,其實變量名也可以和函數名不一樣,如:
var thingsToDoToday = function flyToTheMoon() { alert("Zoom! Zoom! Zoom"); } thingsToDoToday();Why have a name?
添加一個函數名,看起來多余,其實還是很有用的,比如在遞歸函數中,可以通過函數名調用自身,如下:
var thingsToDoToday = function flyToTheMoon() { if(!onTheMoon) flyToTheMoon(); else alert("One small step for a man.."); } thingsToDoToday();
Why are anonymous functions useful?It can also useful for debugging because you can see the function’s
name in a call stack. Anonymous functions generally all look the same in the call stack. If you have a nasty debugging situation, sometimes giving names to the functions you are interested in can make things clearer
Not having to set a name for an anonymous function is just a convenience thing since in most cases the name of the function doesn’t really matter. Most of the time anonymous functions and named functions will both do any job perfectly well.
Functions created with the function operator can be very useful. See some examples of where it can be used.
本文截取自:http://helephant.com/2008/08/23/javascript-anonymous-functions/
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/85405.html
摘要:引用一個的提問個人覺得總結的比較好的兩句話原文地址另外,附上中對閉包的講解閉包中文對于閉包的簡要概括原文原文地址匿名函數和閉包來自文章作者版權聲明自由轉載非商用非衍生保持署名創意共享許可證轉載請注明出處 引用一個stackoverflow的提問 個人覺得總結的比較好的兩句話: An anonymous function is just a function that has no na...
摘要:操作符的兩種形態其實在的操作符描述中,語法是你會發現被中括號所包圍也就意味著可缺省,因此,如果對于不含參數的構造函數而言與二者并無區別,那我們接著思考一個問題,對于前面返回函數的而言,當的時候為什么執行的是而不是呢。 首先歡迎大家關注我的Github博客,也算是對我的一點鼓勵,畢竟寫東西沒法變現,堅持下去也是靠的是自己的熱情和大家的鼓勵。各位讀者的Star是激勵我前進的動力,請不要吝...
摘要:我們可以用普通函數內部嵌套匿名函數,形成一個閉包來使變量駐留在內存中。局部變量閉包為什么要將賦值給變量呢這里我們就要談到匿名函數調用問題匿名函數如何調用還是上面的例子會將整個函數體打印出來這樣才調用了函數內部的匿名函數看到這里。 閉包含義: 閉包是指有權訪問另一個函數作用域中的變量的函數,創建閉包的常見的方式,就是在一個函數內部創建另一個函數,通過另一個函數訪問這個函數的局部變量。 這...
摘要:如果不聲明類型呢如果注釋掉類型注解重新編譯,還是會報錯,只是錯誤信息變了,這次是第行即使沒有顯式的類型注解,的類型推導系統也會發揮作用,此處通過類型推導認為函數的參數應該是字符串,但是傳入了數字,因此報錯。 記得Facebook曾經在一次社區活動上說過,隨著他們越來越多地使用Javascript,很快就面臨了曾經在PHP上遇到的問題:這東西到底是啥? 動態語言就像把雙刃劍,你可以愛死它...
摘要:在運行時環境中,通過調用函數創建值,該函數動態生成匿名的唯一值。創建和使用值的唯一創建方法,是通過調用函數來返回,不支持操作。共享體系提供了一個全局注冊表,用于在大文件或多文件代碼中追蹤值。 Symbol由來 Symbol是ES6引入的新類型,所以在ES5的基礎上,JS就有了字符串(string)、數字型(number)、布爾(bool)、null、undefined和Symbol共六...
閱讀 2866·2021-11-11 10:58
閱讀 1920·2021-10-11 10:59
閱讀 3488·2019-08-29 16:23
閱讀 2324·2019-08-29 11:11
閱讀 2784·2019-08-28 17:59
閱讀 3838·2019-08-27 10:56
閱讀 2049·2019-08-23 18:37
閱讀 3111·2019-08-23 16:53