本文目錄一覽:
- 1、下面js代碼 結果是什麼,怎麼解釋?
- 2、JavaScript:函數聲明與函數表達式
- 3、js的執行原理是什麼?
- 4、如何將javascript代碼編譯為c++或java
- 5、JavaScript預編譯與執行順序的關係
- 6、js執行順序
下面js代碼 結果是什麼,怎麼解釋?
這個題類似的我遇到過,剛運行了一下,是100,10,100,關鍵是js預編譯,類似的題還有
var tt = ‘aa’;
function test(){
alert(tt); –undefined
alert(this.tt);–aa
var tt = ‘dd’;
alert(tt); –dd
alert(this.tt);–aa
一個函數被定義的時候 它的「可訪問屬性鏈」會被生成,以上函數的可訪問屬性鏈 self-window。
當它被執行的時候,首先創建函數自定義的變數(如 var a; 無論a在函數哪個地方定義,函數執行時會首先被創建,值為undifined)
函數引用到一個變數的時候,會循著「可訪問屬性鏈」查找,如果自身有定義,則不訪問window。
ps 不敢瞎解釋,僅代表個人觀點,希望有幫助
JavaScript:函數聲明與函數表達式
javascript雖然是解釋執行的語言,但也會進行預編譯。
if(condition){
function sayHi(){
alert(“Hi!”);
}
}else{
function sayHi(){
alert(“Yo!”);
}
}
這種形式,JS引擎在預編譯的過程中會註冊方法到window對象下,就是window.sayHi。
而不會顧及if else條件,導致重複的sayHi方法被註冊,在這種情況下是無效語法。
var sayHi;
if(condition){
sayHi=function sayHi(){
alert(“Hi!”);
};
}else{
sayHi=function sayHi(){
alert(“Yo!”);
};
}
而下面這種是作為一個 變數(而非函數function),變數是可以被重複賦值的,所以語法不會有問題。
不知道有沒有說清楚。
js的執行原理是什麼?
JS是解釋執行的,即讀取一個語句就執行一個。以前的嚴格JS是以分號為語句的分隔符,但現在一些瀏覽器已經接受以換行符為分隔符(似乎是很多人喜歡用基於對象的編程了,而在JS中寫對象的函數是需要加分號的,所以很多人都愛忘)。
JS本身只提供語法解析與少部分內部函數支持,其他的均由宿主支持。比如在網頁JS中的window, document, navigator等對象,均是由瀏覽器提供基於其它語言的代碼,這些代碼通常被隱藏,但很大程度上決定了JS的運行效率。如果你有興趣,打開Chrome,按F12,調處Console,然後輸alert(注意沒有()),你就會發現[native code]這個東西。
如何將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
目標代碼包括機器碼和符號表(函數及變數名)。連接器的主要作用是通過符號表在庫文件和其他模塊中找到在目標代碼中引入或未定義的符號(函數及變數名),將幾個目標代碼合成可執行文件。
JavaScript預編譯與執行順序的關係
按照代碼塊的先後順序關係,先對代碼塊進行預編譯,再執行。代碼塊指的是script標籤包含的js片段。具體如下:
step 1. 讀入第一個代碼塊。
step 2. 做語法分析,有錯則報語法錯誤(比如括弧不匹配等),並跳轉到step5。
step 3. 對var變數和function定義做「預編譯處理」(永遠不會報錯的,因為只解析正確的聲明)。
step 4. 執行代碼段,有錯則報錯(比如變數未定義)。
step 5. 如果還有下一個代碼段,則讀入下一個代碼段,重複step2。
step6. 結束。
js執行順序
你現在是先定義了函數a,然後定義了函數b,然後再去執行函數a
即使你把代碼改成這樣依舊能夠正常運行
a();
function a() {
b();
}
function b() {
console.log(111)
}
因為JS運行環境會把定義的代碼(變數/函數)提升到作用域的最前面
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/235760.html