摘要:函數(shù)有很多種,我們就選擇我們不懂的函數(shù)開始學(xué)習(xí)中自動運(yùn)行的匿名函數(shù)在中可以使用匿名函數(shù)在我們學(xué)習(xí)的時候也有類似的概念,匿名實(shí)現(xiàn)類,在中的函數(shù)也是一種對象,也是需要一塊內(nèi)存對其進(jìn)行保存。
函數(shù)有很多種,我們就選擇我們不懂的函數(shù)開始學(xué)習(xí)!JS中自動運(yùn)行的匿名函數(shù)
在JavaScript中可以使用匿名函數(shù)(在我們學(xué)習(xí)Java的時候也有類似的概念,匿名實(shí)現(xiàn)類),在JavaScript中的函數(shù)也是一種對象,也是需要一塊內(nèi)存對其進(jìn)行保存。如果想調(diào)用該函數(shù),我們只是需要找到這塊內(nèi)存即可,然后就可以執(zhí)行。關(guān)鍵步驟如下:
將函數(shù)對象保存到一塊內(nèi)存當(dāng)中
找到這塊內(nèi)存
通常我們使用函數(shù)名來查找這塊地址,不過通過函數(shù)名只是找到這塊內(nèi)存地址的一種工具而已。
function test01(){ console.log("定義方式"); } //函數(shù)的調(diào)用 test01(); var test02 = function () { console.log("變量方式"); } //函數(shù)的調(diào)用 test02();
上述的示例,我們就是通過函數(shù)名找到了這塊內(nèi)存地址,在使用()進(jìn)行函數(shù)的執(zhí)行,也就是只要我們能找到這塊內(nèi)存就可以去執(zhí)行!
匿名函數(shù),顧名思義就是沒有名字的函數(shù),其實(shí)在上面寫的test02函數(shù)表達(dá)式中,我們就創(chuàng)建了匿名函數(shù),并將該函數(shù)賦值給了變量test02,用test02來進(jìn)行函數(shù)的調(diào)用,調(diào)用方式就是在變量test02后面加入小括號,這是匿名函數(shù)的調(diào)用方式之一
還有一種匿名函數(shù)的調(diào)用規(guī)則如下:
第一步:使用function關(guān)鍵字定義一個函數(shù)
第二步:使用小括號將內(nèi)容括起來
關(guān)鍵步驟:這只是一種語法的要求,否則后面的執(zhí)行語句無法被引擎正確的識別,如果這樣將函數(shù)定義好,引擎就會為其分配一塊內(nèi)存保存
第三步:直接在后面加入小括號完成調(diào)用,可以放入?yún)?shù)
(function (x, y) { console.log(x+y); })(2, 3); //等價(jià)于代碼 var test03 = function(x,y){ console.log(x+y); }(2,3);
代碼分析
var log=(function(){ console.log("創(chuàng)建日志函數(shù)"); return function(param){ console.log(param); }; })(); log("www.baidu.com");
這段代碼屬于一種比較經(jīng)典的代碼,這里創(chuàng)建了一個自動運(yùn)行的匿名函數(shù),不過其返回值仍然是一個匿名函數(shù),也就是說函數(shù)自運(yùn)行后返回的結(jié)果仍然是函數(shù)。把返回值的函數(shù)賦值給變量log,就可以使用log變量來調(diào)用返回的函數(shù)了。
請注意上述代碼中,我們其實(shí)是包含兩塊內(nèi)存保存函數(shù),自動運(yùn)行的函數(shù)本身有一塊內(nèi)存來保存,當(dāng)碰到后面表示執(zhí)行的小括號后會自動運(yùn)行,另外還有一塊內(nèi)存來保存所返回的函數(shù),而返回的值其實(shí)是這塊內(nèi)存地址,這樣log變量就指向了這塊保存函數(shù)的內(nèi)存,因此可以使用log來完成對函數(shù)的執(zhí)行。
一些有趣的自運(yùn)行函數(shù)的定義方式
// 下面2個括弧()都會立即執(zhí)行 (function () { /* code */ } ()) // 推薦使用這個 (function () { /* code */ })() // 但是這個也是可以用的 // 由于括弧()和JS的&&,異或,逗號等操作符是在函數(shù)表達(dá)式和函數(shù)聲明上消除歧義的 // 所以一旦解析器知道其中一個已經(jīng)是表達(dá)式了,其它的也都默認(rèn)為表達(dá)式了 var i = function () { return 10; } (); true && function () { /* code */ } (); 0, function () { /* code */ } (); // 如果你不在意返回值,或者不怕難以閱讀 // 你甚至可以在function前面加一元操作符號 !function () { /* code */ } (); ~function () { /* code */ } (); -function () { /* code */ } (); +function () { /* code */ } (); // 還有一個情況,使用new關(guān)鍵字,也可以用,但我不確定它的效率 // http://twitter.com/kuvos/status/18209252090847232 new function () { /* code */ } new function () { /* code */ } () // 如果需要傳遞參數(shù),只需要加上括弧() void function(){ /* code */ }();
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/100818.html
摘要:二在中函數(shù)是如何執(zhí)行的函數(shù)我們之前已經(jīng)都接觸過了,函數(shù)無非有兩部分?jǐn)?shù)據(jù)和對數(shù)據(jù)的操作。函數(shù)的調(diào)用輸出結(jié)果為我們使用了的調(diào)試,函數(shù)在執(zhí)行時會將參數(shù)和函數(shù)中所用到的變量方法相同的地位,即在函數(shù)內(nèi)部執(zhí)行的時候不會區(qū)分是參數(shù)還是變量。 showImg(https://segmentfault.com/img/remote/1460000017790532); 準(zhǔn)備寫點(diǎn)亂七八糟的文章,對Java...
摘要:和,前者是過濾選擇器而后者是子代選擇器。第三章中的操作查找節(jié)點(diǎn)想要查找元素節(jié)點(diǎn)或者是屬性節(jié)點(diǎn),就是通過前一章學(xué)習(xí)的選擇器獲取相應(yīng)元素的文本,或者是通過選擇器屬性名獲取某元素相應(yīng)屬性的值。 About Javscript record the thing which maybe forgetten 原生JavaScript Javascript DOM document.writ...
摘要:內(nèi)部的稱為內(nèi)部函數(shù)或閉包函數(shù)。過度使用閉包會導(dǎo)致性能下降。,閉包函數(shù)分為定義時,和運(yùn)行時。循環(huán)會先運(yùn)行完畢,此時,閉包函數(shù)并沒有運(yùn)行。閉包只能取得外部函數(shù)中的最后一個值。事件綁定種的匿名函數(shù)也是閉包函數(shù)。而對象中的閉包函數(shù),指向。 閉包概念解釋: 閉包(也叫詞法閉包或者函數(shù)閉包)。 在一個函數(shù)parent內(nèi)聲明另一個函數(shù)child,形成了嵌套。函數(shù)child使用了函數(shù)parent的參數(shù)...
摘要:前言大家學(xué)的時候,經(jīng)常遇到自執(zhí)行匿名函數(shù)的代碼,今天我們主要就來想想說一下自執(zhí)行。其實(shí),前面兩個例子里的變量,也可以換成,因?yàn)楹屯饷娴牟辉谝粋€作用于,所以不會出現(xiàn)問題,這也是匿名函數(shù)閉包的威力。 前言 大家學(xué)JavaScript的時候,經(jīng)常遇到自執(zhí)行匿名函數(shù)的代碼,今天我們主要就來想想說一下自執(zhí)行。 在詳細(xì)了解這個之前,我們來談了解一下自執(zhí)行這個叫法,本文對這個功能的叫法也不一定完全對...
摘要:閉包閉包是什么閉包和匿名函數(shù)在中被引入??梢詫⒛涿瘮?shù)和閉包視作相同的概念。閉包和字符串或整數(shù)一樣,是一等值類型。何時使用我們通常把閉包當(dāng)做函數(shù)和方法的回調(diào)使用。 閉包 閉包是什么? 1).閉包和匿名函數(shù)在PHP5.3中被引入。2).閉包是指在創(chuàng)建時封裝函數(shù)周圍狀態(tài)的函數(shù),即使閉包所在的環(huán)境不存在了,閉包封裝的狀態(tài)依然存在,這一點(diǎn)和Javascript的閉包特性很相似。3).匿名函數(shù)就...
閱讀 1806·2021-11-24 10:21
閱讀 1216·2021-09-22 15:25
閱讀 3176·2019-08-30 15:55
閱讀 716·2019-08-30 15:54
閱讀 3467·2019-08-30 14:20
閱讀 1665·2019-08-30 14:06
閱讀 646·2019-08-30 13:11
閱讀 3153·2019-08-29 16:43