日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

javascript代码解释执行过程

發布時間:2024/4/14 javascript 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 javascript代码解释执行过程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

javascript是由瀏覽器解釋執行的腳本語言,不同于java c,需要先編譯后運行,javascript 由瀏覽器js解釋器進行解釋執行,總的過程分為兩大塊,預編譯期和執行期

下面的幾個demo解釋了js解釋器對變量和代碼的解釋過程

//#demo1 foo();//alert(1) function foo(){//聲明式函數alert(1); } foo2();//undefined is not a function var foo2 = function(){//賦值式函數聲明,其實是函數表達式alert("foo2"); }; //#demo2 alert(str);//undefined var str="str"; alert(str);//str

js執行過程分為與編譯期和執行期(以代碼塊為單位,邊解釋邊執行),在預編譯期,js解釋器會對本代碼段內所有的 聲明的變量和方法進行處理,將變量和方法提到對應的作用域的最前面,該過程只是對變量進行聲明,并不會進行初始化或者賦值(缺省值默認為undefined)

//#demo1中聲明式函數與賦值式函數區別在于 聲明式函數會在預編譯期被整體提到作用域前面,所以其實#demo1經過預編譯后代碼如下:

var foo2; //缺省值是'undefined' function foo(){alert(1); }foo(); foo2();//undefined is not a function foo2 = function(){alert('foo2'); };

JavaScript 中局部變量只可能通過兩種方式聲明,一個是作為函數參數,另一個是通過 var 關鍵字聲明。 var 表達式和 function 聲明都將會被提升到當前作用域的頂部,看一下#demo3

bar(); var bar = function() {}; var someValue = 42;test(); function test(data) {if (false) {goo = 1;} else {var goo = 2;}for(var i = 0; i < 100; i++) {var e = data[i];} }

上面代碼在運行之前將會被轉化。JavaScript 將會把 var 表達式和 function 聲明提升到當前作用域的頂部。

var bar,someValue; function test(data){var goo,i,e;if(false){goo = 1;} else{goo = 2;}for(i=0;i<100;i++){e = data[i];} } bar();//undefined bar = function(){}; someValue = 42; test();

當訪問函數內的 goo 變量時,JavaScript 會按照下面順序查找:

1.當前作用域內是否有 var goo的定義。 2.函數形式參數是否有使用 goo名稱的。 3.函數自身是否叫做 goo。 4.回溯到上一級作用域,然后從 #1 重新開始

轉載于:https://www.cnblogs.com/teamobaby/p/3839965.html

總結

以上是生活随笔為你收集整理的javascript代码解释执行过程的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。