JavaScript運(yùn)行過程中的“預(yù)編譯階段”和“執(zhí)行階段”
javascript相對(duì)于其它語(yǔ)言來說是一種弱類型的語(yǔ)言,在其它如java語(yǔ)言中,程序的執(zhí)行需要有編譯的階段,而在javascript中也有類似的“預(yù)編譯階段”(javascript的預(yù)編譯是以代碼塊為范圍<script></script>,即每遇到一個(gè)代碼塊都會(huì)進(jìn)行 預(yù)編譯>執(zhí)行),了解javascript引擎的執(zhí)行機(jī)理,將有助于在寫js代碼過程中的思路總結(jié)
首先科普下javascript中的兩種聲明方式,var和function,前者聲明的是變量,后者聲明的是方法
在預(yù)編譯中,javascript對(duì)這兩種聲明做出了兩種處理方案
<script>
var a = "1"; //聲明變量a
function b(){ //聲明方法b
alert();
}
var c = function(){ //聲明變量c
alert();
}
</script>
以上代碼塊中,a、c為變量賦值,b為函數(shù)聲明,當(dāng)執(zhí)行以上的代碼時(shí),首先會(huì)進(jìn)入預(yù)編譯階段,對(duì)與變量賦值a、c會(huì)在內(nèi)存中開辟一塊內(nèi)存空間并指向變量名,且賦值為undefined
對(duì)于函數(shù)聲明,則同樣會(huì)進(jìn)行開辟內(nèi)存空間,但賦值的對(duì)象會(huì)將聲明的函數(shù)賦值給函數(shù)名
預(yù)編譯階段:(PS:不管代碼中聲明變量和聲明函數(shù)的順序如何,在預(yù)編譯階段會(huì)先聲明變量,再聲明函數(shù))
<script>
var a = undefined;
var c = undefined; var b = function(){
alert();
} </script>
執(zhí)行階段:
<script>
a = "1";
c = function(){
alert();
}
</script>
整體執(zhí)行步驟:
<script>
var a = undefined;
var c = undefined;
var b = function(){
alert();
}
a = "1";
c = function(){
alert();
}
</script>
題目:
<script>
var a = "1";
function b(){
alert(a);
var a = "2";
}
b();
</script>
ps:javascript的預(yù)編譯
一、先預(yù)定義變量,再預(yù)定義函數(shù)
二、變量的預(yù)編譯只作聲明,不作初始化,初始化在執(zhí)行時(shí)
三、function語(yǔ)句定義的函數(shù),不僅聲明了函數(shù)名,而且函數(shù)體也進(jìn)行了處理
四、匿名函數(shù)不會(huì)預(yù)編譯
function f(){ // 聲明函數(shù)f
return 1; } alert(f()); // 返回1
var f = function(){ // 定義匿名函數(shù)f
return 2; } alert(f()); // 返回2
先預(yù)定義了變量f,然后同名函數(shù)f()覆蓋了變量f,所以第一次輸出1;變量的預(yù)編譯
var f = function(){ // 定義匿名函數(shù)f
return 1; }
alert(f()); // 返回1
function f(){ // 聲明函數(shù)f
return 2; }
alert(f()); // 返回1
先預(yù)定義了變量f,然后同名函數(shù)f()覆蓋了變量f.
相關(guān)文章
Javascript技術(shù)難點(diǎn)之a(chǎn)pply,call與this之間的銜接
這篇文章主要介紹了Javascript技術(shù)難點(diǎn)之a(chǎn)pply,call與this之間的銜接的相關(guān)資料,需要的朋友可以參考下2015-12-12
require導(dǎo)入module.exports 或 exports導(dǎo)出的使用方法
module.exports用于導(dǎo)出整個(gè)模塊的內(nèi)容,可以通過賦值給 module.exports 導(dǎo)出一個(gè)對(duì)象、函數(shù)或值,導(dǎo)出的內(nèi)容可以被其他模塊通過require 導(dǎo)入,本文給大家介紹require導(dǎo)入module.exports 或 exports導(dǎo)出的使用,感興趣的朋友一起看看吧2023-11-11
js獲取修改title與jQuery獲取修改title的方法
這篇文章主要介紹了js獲取修改title與jQuery獲取修改title的方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-02-02
談?wù)勎覍?duì)JavaScript DOM事件的理解
DOM與事件是JavaScript最核心的組成部分之一,他們賦予了頁(yè)面無(wú)限的想象空間,你根本無(wú)法離開他們,否則js將寸步難行。本文給大家分享我對(duì)javascript dom事件的了解,對(duì)javascript dom事件相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧2015-12-12
js 創(chuàng)建對(duì)象 經(jīng)典模式全面了解
下面小編就為大家?guī)硪黄猨s 創(chuàng)建對(duì)象 經(jīng)典模式全面了解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-08-08

