摘要:關(guān)于中的預(yù)解析相信對有所了解的程序猿都知道舉個例子上面的這個例子會彈出解析過程中的函數(shù)絕對是一道美麗的風(fēng)景那么有匿名函數(shù)存在時是怎么解析的呢下面看幾個例子從中一窺究竟實例對于使用語句聲明的函數(shù)解釋器就會在預(yù)編譯期間把函數(shù)處理這個處理就是建立
關(guān)于Js中的預(yù)解析相信對js有所了解的程序猿都知道,舉個例子:
alert(a); var a = 10;
上面的這個例子會彈出 undefined ,解析過程:var a; alert(a);a = 10;
javascript中的函數(shù)絕對是一道美麗的風(fēng)景,那么有匿名函數(shù)存在時,是怎么解析的呢?下面看幾個例子,從中一窺究竟.
實例1
alert(f); // function f(){alert(2);} function f(){ alert(1); } alert(f); // function f(){alert(2);} f(); // 2 function f(){ alert(2); } f(); // 2
對于使用function語句聲明的函數(shù),js解釋器就會在預(yù)編譯期間把函數(shù)處理,這個處理就是建立函數(shù)索引.
所以預(yù)解析期間對函數(shù)f建立索引,程序從上往下執(zhí)行,函數(shù)f指向function f(){alert(1);},繼續(xù)往下,還有一個函數(shù)f,此時將第一建立的索引覆蓋掉,此時函數(shù)f指向的是function f(){alert(2);}.到這里預(yù)解析階段結(jié)束,然后進(jìn)行執(zhí)行,第一次alert 顯然彈出function f(){alert(2);},第二次同樣也是,f()執(zhí)行彈出2,第二次f()也同樣彈出2.
實例2
alert(f);// function(){alert(2);} var f = function(){ alert(1); } alert(f);// 1 f(); //1 function f(){ alert(2); } f();// 1 alert(f); // function(){alert(1)}
實例2與實例1 相比,將第一個函數(shù)f寫成了匿名函數(shù),預(yù)編譯階段,對匿名函數(shù)不做任何處理,直到執(zhí)行期才按表達(dá)式逐行進(jìn)行解釋,所有返回的結(jié)果就不一樣了.預(yù)解析期間得到的函數(shù)是function f(){alert(2);},但是執(zhí)行到匿名函數(shù),將函數(shù)f重新賦值了,改變了函數(shù)f.
實例3
alert(f);// undefined var f = function(){ alert(1); } f(); // 1 var f = function(){ alert(2); } f();// 2
兩個都是匿名函數(shù),在預(yù)解析期間都沒有執(zhí)行,所以第一次是undefined,之后進(jìn)行賦值運算,依次顯示1和2
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/78575.html
摘要:我們在面試時,總會碰到一些奇奇怪怪的關(guān)于作用域的面試題,其實弄清楚原理,萬變不離其宗,大部分的面試題都可以得姐。 showImg(https://segmentfault.com/img/bV7Cri?w=1563&h=879); 我們在面試時,總會碰到一些奇奇怪怪的關(guān)于 作用域 的面試題,其實弄清楚原理,萬變不離其宗,大部分的面試題都可以得 ‘姐’。 所以,今天我們來談?wù)?JavaS...
摘要:預(yù)解析聲明告知瀏覽器在全局作用域中有一個變量名為的變量。執(zhí)行代碼的就是棧內(nèi)存,作用域也是棧內(nèi)存。關(guān)鍵字在中主要研究都是函數(shù)中的中的代表的是當(dāng)前行為執(zhí)行的主體方法,函數(shù),事件中的上下文代表的是當(dāng)前行為執(zhí)行的環(huán)境區(qū)域例如小明在沙縣小吃吃蛋炒飯。 基本認(rèn)識 數(shù)據(jù)類型 基本數(shù)據(jù)類型 string, number, null, boolean, undefined 引用數(shù)據(jù)類型 object: ...
摘要:所以語句也會常常用于終止函數(shù)的運行,還有也可以不寫語句,但是會默認(rèn)返回函數(shù)內(nèi)部的對象中,函數(shù)的內(nèi)部都有一個對象,用來記錄在調(diào)用函數(shù)時所傳進(jìn)來的參數(shù),可以說是一個偽數(shù)組。里面使用了關(guān)鍵字,這個的指向就是使用構(gòu)造函數(shù)創(chuàng)建的對象,也不需要返回對 今天好像是情人節(jié)?所以最適合面向?qū)ο螅琂avaScript 也有對象,我們也可以隨時面向?qū)ο?,方便得很,那怎樣才有對象呢?下面告訴你! 1. 數(shù)組 ...
摘要:大彬哥版權(quán)所有翻錄必究尼古拉斯屌大彬哥群尼古拉斯屌大彬哥函數(shù)聲明函數(shù)表達(dá)式是不是簡單的讓人發(fā)指區(qū)別就一句話,函數(shù)聲明,可以在函數(shù)調(diào)用之后,因為有函數(shù)預(yù)解析。而函數(shù)表達(dá)式必須在調(diào)用之前。 通過前三課講解,大家應(yīng)該能做到 1.手里有一份隨時能夠換工作自信的簡歷 2.知道了學(xué)習(xí)js的正確姿勢 3.理解了全局對象、全局上下文、知道有預(yù)解析同時做了至少50道面試題 4.能熟練的使用json構(gòu)建...
摘要:另外,如果你想跳過這里,你可以直接跳到立即調(diào)用函數(shù)表達(dá)式進(jìn)行閱讀,但是我建議你讀完整篇文章。當(dāng)圓括號包裹函數(shù)時,它會默認(rèn)將函數(shù)作為表達(dá)式去解析,而不是函數(shù)聲明。 原文:Immediately-Invoked Function Expression (IIFE) by Ben Alman原譯:立即執(zhí)行函數(shù) by Murphywuwu改增內(nèi)容: by blanu 也許你沒有注意到,我是一個...
閱讀 1375·2019-08-30 15:55
閱讀 1655·2019-08-26 10:21
閱讀 3447·2019-08-23 18:28
閱讀 3383·2019-08-23 15:38
閱讀 753·2019-08-23 15:24
閱讀 2143·2019-08-23 13:59
閱讀 785·2019-08-23 11:31
閱讀 2875·2019-08-23 10:53