JavaScript函數(shù)聲明與函數(shù)表達(dá)式 如何定義一個(gè)函數(shù)
????????在JavaScript里有兩種定義函數(shù)的方法
函數(shù)聲明
????????function 函數(shù)名稱 (參數(shù):可選){ 函數(shù)體 }
函數(shù)表達(dá)式
????????function 函數(shù)名稱(可選)(參數(shù):可選){ 函數(shù)體 }
function foo(){} 函數(shù)聲明
var bar = function foo(){}; 函數(shù)表達(dá)式
new function bar(){}; 函數(shù)表達(dá)式
function foo(){ function bar(){} 函數(shù)聲明}
(function(){})() 函數(shù)表達(dá)式
+function(){}() 函數(shù)表達(dá)式
!function(){}() 函數(shù)表達(dá)式
;(function(){})() 函數(shù)表達(dá)式,分號(hào)反正前面沒加分號(hào),解析錯(cuò)誤
函數(shù)聲明與函數(shù)表達(dá)式的一些細(xì)微的不同在JavaScript里函數(shù)聲明會(huì)有一個(gè)hoist的過(guò)程,也就是說(shuō)在函數(shù)執(zhí)行的之前,函數(shù)體就已經(jīng)被解析了。一個(gè)典型的例子
if (true) { function foo() { return "first"; } } else { function foo() { return "second"; } } foo();
正常情況下,得到的結(jié)果是 second
而
var foo; if (true) { foo = function() { return "first"; }; } else { foo = function() { return "second"; }; } foo();
我們能得到想要的結(jié)果
http://www.nowamagic.net/librarys/veda/detail/1630
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/85970.html
摘要:如下代碼輸出的結(jié)果是代碼執(zhí)行分為兩個(gè)大步預(yù)解析的過(guò)程代碼的執(zhí)行過(guò)程預(yù)解析與變量聲明提升程序在執(zhí)行過(guò)程中,會(huì)先將代碼讀取到內(nèi)存中檢查,會(huì)將所有的聲明在此進(jìn)行標(biāo)記,所謂的標(biāo)記就是讓解析器知道有這個(gè)名字,后面在使用名字的時(shí)候不會(huì)出現(xiàn)未定義的錯(cuò)誤。 showImg(https://segmentfault.com/img/remote/1460000012922850); 如下代碼輸出的結(jié)果是...
摘要:而閉包的神奇之處正是可以阻止事情的發(fā)生。拜所聲明的位置所賜,它擁有涵蓋內(nèi)部作用域的閉包,使得該作用域能夠一直存活,以供在之后任何時(shí)間進(jìn)行引用。依然持有對(duì)該作用域的引用,而這個(gè)引用就叫閉包。 引子 先看一個(gè)問題,下面兩個(gè)代碼片段會(huì)輸出什么? // Snippet 1 a = 2; var a; console.log(a); // Snippet 2 console.log(a); v...
摘要:匿名函數(shù)是不能單獨(dú)寫的,所以就提不上立即執(zhí)行了。六立即執(zhí)行函數(shù)在閉包中的應(yīng)用立即執(zhí)行函數(shù)能配合閉包保存狀態(tài)。來(lái)看下上節(jié)內(nèi)容中閉包的例子現(xiàn)在,我們來(lái)利用立即執(zhí)行函數(shù)來(lái)簡(jiǎn)化它第一個(gè)匿名函數(shù)執(zhí)行完畢后,返回了第二個(gè)匿名函數(shù)。 前面的閉包中,提到與閉包相似的立即執(zhí)行函數(shù),感覺兩者還是比較容易弄混吧,嚴(yán)格來(lái)說(shuō)(因?yàn)橄透叱虒?duì)閉包的定義不同),立即執(zhí)行函數(shù)并不屬于閉包,它不滿足閉包的三個(gè)條件。...
摘要:不同的是函數(shù)體并不會(huì)再被提升至函數(shù)作用域頭部,而僅會(huì)被提升到塊級(jí)作用域頭部避免全局變量在計(jì)算機(jī)編程中,全局變量指的是在所有作用域中都能訪問的變量。 ES6 變量作用域與提升:變量的生命周期詳解從屬于筆者的現(xiàn)代 JavaScript 開發(fā):語(yǔ)法基礎(chǔ)與實(shí)踐技巧系列文章。本文詳細(xì)討論了 JavaScript 中作用域、執(zhí)行上下文、不同作用域下變量提升與函數(shù)提升的表現(xiàn)、頂層對(duì)象以及如何避免創(chuàng)建...
摘要:函數(shù)提升在里有兩種方式創(chuàng)建函數(shù),通過(guò)函數(shù)聲明和函數(shù)表達(dá)式。函數(shù)聲明用指定的參數(shù)來(lái)定義函數(shù)。提示不要在中進(jìn)行函數(shù)聲明。問題輸出兩個(gè)都是用函數(shù)聲明的函數(shù),將被提升到的局部作用域頂端。函數(shù)本身將作為函數(shù)聲明在全局范圍內(nèi)提升。 作者關(guān)于提升的話題,總共有兩篇。(后來(lái)又有一個(gè)討論篇),再次搬過(guò)來(lái)。水平有限,如果翻譯的不準(zhǔn)確請(qǐng)包涵,并去看原文。下面開始: 這是我之前的關(guān)于提升的文章,標(biāo)題為《用le...
閱讀 2144·2023-04-26 03:06
閱讀 3592·2023-04-26 01:51
閱讀 2092·2021-11-24 09:38
閱讀 2466·2021-11-17 17:00
閱讀 2337·2021-09-28 09:36
閱讀 949·2021-09-24 09:47
閱讀 2592·2019-08-30 15:54
閱讀 1561·2019-08-30 15:44