導航:首頁 > 源碼編譯 > js編譯原理例子

js編譯原理例子

發布時間:2023-06-14 08:29:32

⑴ 怎麼js理解函數實例

首先我們了解一下對於引用類型變數虛擬機的處理方式:
對於引用類型的變數,虛擬機為其分配內存空間,但在內存空間中存放的並不是變數所引用的對象,而是對象在堆區存放的地址,所以引用變數只是指向被引用那個的對象,而不是存儲了被引用的對象,因而兩個引用變數之間的賦值,實際上九是將一個引用變數存儲的地址復制給另一個引用變數,從而使連個變數指向同一個對象。
好的,我們首先分析第二個例子,為什麼其返回的結果為true

function b(){} 定義了一個函數(也可以理解為一個引用變數);虛擬機為其分配內存空間,內存空間存儲地址加入為「a」;

function a(){return b} 這個就想引用變數b把地址復制給了a,讓a、b指向的內存地址一樣;
a1=a();
a2=a();
兩個賦值,結果自然為true

再看第一個
function a(){return function b(){}}
a1=a();
a2=a();
當賦值的同時 return function b(){} 返回的數據類型一樣,但虛擬機為其分配連個地址,指向不同,所以結果為false;
你可以用typeof()方法測試一下a1、a2以及b function b()的數據類型 你會發現他們的類型都是function,a1/a2的值都是function b(){}但唯一的區別就是內存地址不一樣,引用類型指向不一樣,結果就不一樣。

這些概念的東西,有時候也挺煩人的,但也要慢慢學習,消化這些實際存儲模式。

⑵ Js編程語言中,自調用函數是什麼舉個Js代碼例子解釋一下!

自調用函數:

顧名思義,有2個意思

《1》自行調用的函數:

就是指,函數在頁面載入後或者之前就自行調用,無需藉助其他函數或方法來啟動;

例如:

(function(win){
win.alert(11);
})(window);

《2》自己調用自己的函數:

就是指,遞歸:在一個函數裡面調用自己的函數,當符合一定規則時,跳出自我調用,就是遞歸。

例如:

varfn=function(n){
if(n==1)return1;
elsereturnn*fn(n-1);
}

⑶ js怎麼編譯成JSC

l5是一個用JS來開發游戲的框架,通過javascript Binding的方式可以將游戲編譯到手機上。這對前端開發人員來說非常方便,開發效率也比使用c++開發要快的多。
jsb模式下是通過打包spidermonkey來運行JS代碼的。由於JS是一個解釋型的語言,所以是把js當作assets直接拷貝進去的。帶來的問題就是將apk包解壓後就可以直接拿到js的源代碼。
幸好官方出了一個cocos2d-console的工具,通過該工具可以將js編譯為位元組碼。該工具在官方發布包的tools目錄下。
那如何在發布的時候自動

⑷ 如何將javascript代碼編譯為c++或java

java是不能夠編譯C/C++文件的。他們原理完全不同。背後的運行機制也完全不一樣。
C/C++源文件只能夠用C/C++的編譯器來編譯。
以GCC編譯器為例,整個編譯可以分為四步。
第一步是預處理,包括語法檢查等工作。
gcc -P abc.c
第二步由源程序生產匯編語言代碼。
gcc -S abc.c
會生成abc.s文件,這個文件里就是匯編代碼。
第三步編譯器生成目標代碼,一個源文件生成一個目標代碼。
gcc -c abc.c
會生成abc.o
第四步連接器從目標代碼生成可執行文件。
gcc abc.o
目標代碼包括機器碼和符號表(函數及變數名)。連接器的主要作用是通過符號表在庫文件和其他模塊中找到在目標代碼中引入或未定義的符號(函數及變數名),將幾個目標代碼合成可執行文件。

⑸ VUE中如何動態編譯js

需求:動態獲取一段字元串類型的js腳本,動態編譯它並且可以敏叢完美在vue中運行與之交互。
實現:動態編譯js的方式有飢橘eval和new function
簡單例子:

eval:

new function:

顯然後者更利於擴展,詳細了解區別可以參考鏈接內容:爛拿團
https://www.hu.com/question/29743491
https://imys.net/20151222/eval-with-new-function.html

要注意使用new Function,在vue環境中直接賦值的方式函數作用域與賦值vue結構對象不同: https://jsfiddle.net/5neLzn1x/

⑹ javascript可以用某種手段編譯成一個二進制可執行文件嗎

你可以把腳本用二進制方式寫進圖片或者視頻里,但是這個東西對於網站的過濾來說,會變得很復雜。加入我在圖片里插入了惡意腳本,你還允許我上傳到伺服器。那伺服器就有可能被我通過那段惡意代碼控制。
你寫好一段js腳本,把它以二進制的方式添加到圖片里,圖片裡面的圖片類型要保留,然後加入/* xxxx */來注釋掉圖片內容。
在<script src=''><script>,src屬性可以指定圖片。

⑺ 如何用js實現中綴表達式轉後綴表達式然後求值

逆波蘭表達式,它的語法規定,表達式必須以逆波蘭表達式的方式給出。逆波蘭表達式又叫做後綴表達式。這個知識點在數據結構和編譯原理這兩門課程中都有介紹,下面是一些例子:
正常的表達式 逆波蘭表達式
a+b ---> a,b,+
a+(b-c) ---> a,b,c,-,+
a+(b-c)d ---> a,d,b,c,-,,+
a=1+3 ---> a=1,3 +
http=(smtp+http+telnet)/1024 寫成什麼呢?
http=smtp,http,telnet,+,+,1024,/
逆波蘭表達式是一種十分有用的表達式,它將復雜表達式轉換為可以依靠簡單的操作得到計算結果的表達式。例如(a+b)(c+d)轉換為ab+cd+
它的優勢在於只用兩種簡單操作,入棧和出棧就可以搞定任何普通表達式的運算。其運算方式如下:
如果當前字元為變數或者為數字,則壓棧,如果是運算符,則將棧頂兩個元素彈出作相應運算,結果再入棧,最後當表達式掃描完後,棧里的就是結果。
將一個普通的中序表達式轉換為逆波蘭表達式的一般演算法是:
(1)首先構造一個運算符棧,此運算符在棧內遵循越往棧頂優先順序越高的原則。
(2)讀入一個用中綴表示的簡單算術表達式,為方便起見,設該簡單算術表達式的右端多加上了優先順序最低的特殊符號「#」。
(3)從左至右掃描該算術表達式,從第一個字元開始判斷,如果該字元是數字,則分析到該數字串的結束並將該數字串直接輸出。
(4)如果不是數字,該字元則是運算符,此時需比較優先關系。
做法如下:將該字元與運算符棧頂的運算符的優先關系相比較。如果,該字元優先關系高於此運算符棧頂的運算符,則將該運算符入棧。倘若不是的話,則將棧頂的運算符從棧中彈出,直到棧頂運算符的優先順序低於當前運算符,將該字元入棧。
(5)重復上述操作(3)-(4)直至掃描完整個簡單算術表達式,確定所有字元都得到正確處理,我們便可以將中綴式表示的簡單算術表達式轉化為逆波蘭表示的簡單算術表達式。
下面是程序化演算法流程:
1、建立運算符棧stackOperator用於運算符的存儲,壓入'\0'。
2、預處理表達式,正、負號前加0(如果一個加號(減號)出現在最前面或左括弧後面,則該加號(減號)為正負號) 。
3、順序掃描表達式,如果當前字元是數字(優先順序為0的符號),則直接輸出該數字;如果當前字元為運算符或括弧(優先順序不為0的符號),則判斷第4點 。
4、若當前運算符為'(',直接入棧;
若為')',出棧並順序輸出運算符直到遇到第一個'(',遇到的第一個'('出棧但不輸出;
若為其它,比較stackOperator棧頂元素與當前元素的優先順序:
如果 棧頂元素 >= 當前元素,出棧並順序輸出運算符直到 棧頂元素 < 當前元素,然後當前元素入棧;
如果 棧頂元素 < 當前元素,直接入棧。
5、重復第3點直到表達式掃描完畢。
6、順序出棧並輸出運算符直到棧頂元素為'\0'。
各運算符及符號優先順序:
'\0': -1
')': 1
'(': 2
'+'、'-': 3
'*'、'/'、'%': 4
'^': 5
其它: 0

/**
* 計算逆波蘭表達式的值
*/
function calculate(RPolishArray){
var result = 0;
var tempArray = new Array(100);
var tempNum = -1;
for(i = 0;i < RPolishArray.length;i++){
if(RPolishArray[i].match(/\d/)){
tempNum++;
tempArray[tempNum] = RPolishArray[i];
}else{
switch(RPolishArray[i]){
case '+':
result = (tempArray[tempNum-1] *1) + (tempArray[tempNum] * 1);
tempNum--;
tempArray[tempNum] = result;
break;
case '-':
result = (tempArray[tempNum-1] *1) - (tempArray[tempNum] * 1);
tempNum--;
tempArray[tempNum] = result;
break;
case '*':
result = (tempArray[tempNum-1] *1) * (tempArray[tempNum] * 1);
tempNum--;

閱讀全文

與js編譯原理例子相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:758
蘋果郵件無法連接伺服器地址 瀏覽:963
phpffmpeg轉碼 瀏覽:672
長沙好玩的解壓項目 瀏覽:145
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:737
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:486
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:383
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:350
風翼app為什麼進不去了 瀏覽:779
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:151
伊克塞爾文檔怎麼進行加密 瀏覽:893
app轉賬是什麼 瀏覽:163