var a=
10;
宣告declare:var a;
定義defined:a=10;
瀏覽器在以下js**執行之前對var關鍵字進行提前宣告
var a; 預設值是undefined,var只宣告不定義
console.
log(a)
;//=>undefined 此時瀏覽器列印undefined,而不是報錯:a is not defined
var a =12;
//=>建立值12 不需要再宣告a了(變數提公升階段已經宣告了,不會重新處理) 這一步只做了賦值操作,a=12
a =13;
//全域性變數a=13 這一步修改了全域性變數值
console.
log(a)
;//=>13
console.
log(a)
;// 報錯 =>uncaught referenceerror: a is not defined 沒有var 關鍵字不會做變數提公升
a =13
;console.
log(a)
;
function func(){} 相當於func=函式 在這個階段宣告和賦值都做了
func()
;//ok js沒有執行之前,變數提公升階段遇到function關鍵字,宣告了func,並給他賦值func=函式,所以執行func()不會報錯。
function
func()
func()
//報錯 func is not a function,不會再往下執行
varfunc
=function()
var
func
=function()
func()
//ok 只能放在函式下方執行,符合**程式設計的邏輯
把原本作為值的函式表示式匿名函式「具名化」(雖說是起了名字,但是這個名字不能在外面訪問 =>也就是不會在當前當下文中建立這個名字)
當函式執行,在形成的私有上下文中,會把這個具名化的名字做為私有上下文中的變數(值就是這個函式)來進行處理
作用:
var
func
=function
aaa();
aaa();
//=>uncaught referenceerror: aaa is not defined
func
()
settimeout
(function
func()
,1000
);
console.
log(a)
;//報錯=>uncaught referenceerror: cannot access 'a' before initialization 不能在let宣告之前使用變數
let a =12;
a =13
;console.
log(a)
;
var a =12;
console.
log(a)
;//=>12 全域性變數
console.
log(window.a)
;//=>12 對映到go上的屬性a
window.a =13;
console.
log(a)
;//=>13 對映機制是乙個修改另外乙個也會修改
//全域性上下文遇到if ,進行變數提公升,
//新版本 var a=undefined,function func=undefined
console.
log(a, func)
;//=>undefined undefinedif(
!("a"in window))}
console.
log(a)
;//=>undefined
//ec(g)變數提公升
//fn=>1
// =>2
//var fn; 已經宣告過了
// =>4
// =>5
//全域性上下文中有乙個全域性變數fn,值是輸出5的函式(此時window.fn=>5)fn(
);//=>5
functionfn(
)//=>不再處理,變數提公升階段搞過了fn(
);//=>5
functionfn(
)fn()
;//=>5
varfn
=function()
//=>var fn不用在處理了,但是賦值在變數提公升階段沒處理過,此處需要處理 fn=window.fn=>3fn(
//ec(g)變數提公升:var a;function a;
var的變數提公升和let的
es3 es5 變數提公升 當棧記憶體 作用域 形成,js 自上而下執行之前,瀏覽器首先會把所有帶var和function關鍵字的進行提前的 宣告或定義.這種預先處理機制稱之為變數提公升。宣告 declare var a或function sum 定義 defined a 12 也就是賦值 變數提公...
瀏覽器預解析之變數提公升奧秘,手動滑稽
提公升的物件包括 函式宣告 變數宣告 函式內部作用域預設形參宣告 1.函式宣告和變數宣告是同乙個變數名 當函式宣告和變數宣告衝突的時候,變數宣告無法覆蓋函式宣告,變數賦值可以覆蓋函式宣告 所以最後結果為10 具體 a a 呼叫函式 a 10 變數 var a 全域性變數 或者 var a 10 同上...
瀏覽器如何工作
吃飽沒事,隨便翻譯一篇文章。現在的瀏覽器可以做很多事,如chrome可以執行多種應用外掛程式。但我覺得你可能對如何載入展示網頁感興趣。網路是c s架構的。瀏覽器僅僅是其中的一半 客戶端 另一半是等待客戶端發請求的伺服器。首先,瀏覽器要找到web伺服器的位址。它問作業系統伺服器的名字 作業系統便查詢本...