變數提公升 作用域

2021-10-04 20:25:28 字數 2428 閱讀 7350

console.

log(a)

;//=>undefined

console.

log(window.a)

;//=>undefined

console.

log(

'a'in window)

;//=>true 在變數提公升階段,在全域性作用域中宣告了乙個變數a,此時就已經把a當做屬性賦值給window了,只不過此時還沒有給a賦值,預設值undefined in:檢測某個屬性是否隸屬於這個物件

var a =12;

//=>全域性變數值修改,win的屬性值也跟著修改

console.

log(a)

;//=>全域性變數a 12

console.

log(window.a)

;//=>window的乙個屬性名a 12

a =13

;console.

log(window.a)

;//=>13

window.a =14;

console.

log(a)

;//=>14

//=>全域性變數和win中的屬性存在 「對映機制」

console.

log(a) 等價於 console.

log(window.a)

,a的本質是window的屬性,而不是變數

var a = b =

1// a帶var,b不帶

console.

log(a, b)

;//=>undefined undefined

var a =12,

b =12;

functionfn(

)fn()

;console.

log(a, b)

;//=>12 13

/*

* 變數提公升:

* var fn; =>只對等號左邊進行變數提公升

* sum = aaafff111;

*/sum()

;fn()

;//=>uncaught typeerror: fn is not a function

//=>匿名函式之函式表示式

varfn

=function()

;//=>**執行到此處會把函式值賦值給fnfn(

);//=>普通的函式

function

sum(

)

/*

* 2.關於重名的處理:如果名字重複了,不會重新的宣告,但是會重新的定義(重新賦值)[不管是變數提公升還是**執行階段皆是如此]

*//*

* 變數提公升:

* fn = ...(1)

* = ...(2)

* = ...(3)

* = ...(4)

*//*

fn();//=>4

function fn()

fn();//=>4

function fn()

fn();//=>4

var fn=100;//=>帶var的在提公升階段只把宣告處理了,賦值操作沒有處理,所以在**執行的時候需要完成賦值 fn=100

fn();//=>100() uncaught typeerror: fn is not a function

function fn()

fn();

function fn()

fn();

*/

console.

log(fn)

;//=>undefinedif(

1===1)

}// console.log(fn);//=>函式本身

let a=

1console.

log(window.a)

// undefined

[堆記憶體釋放]

[棧記憶體釋放]

在私有作用域中,只有以下兩種情況是私有變數

/*

* 變數提公升:

* var a; var b; var c;

* fn = ***...

*/var a =

12,b =

13,c =14;

function

fn(a)

fn(a)

;//=>把fn執行(小括號中是實參:值) =>執行fn把全域性變數a的值12當做實參傳遞給函式的形參 =>fn(12)

console.

log(a, b, c)

;//=>12 13 20

js變數作用域 變數提公升

1 js作用域 在es5中,js只有兩種形式的作用域 全域性作用域和函式作用域,在es6中,新增了乙個塊級作用域 最近的大括號涵蓋的範圍 但是僅限於let方式申明的變數。2 變數宣告 1 var x 變數宣告 2var x 1 變數宣告並賦值 3 x 1 定義全域性變數並賦值 3 函式宣告 func...

作用域與變數提公升

js中變數的作用域有全域性作用域和區域性作用域兩種,作用域簡單來講就是變數與函式的可訪問範圍。宣告提前是在js預編譯是就進行了,變數提公升知識提公升變數的宣告,並不會吧值也提上來。例1 var name one function test var name one function test 解析 ...

變數提公升以及作用域

1 console.log v1 2var v1 100 3function foo 8foo 9console.log v1 10 undefined undefined 200 100 一共有四次列印的動作,分別來看 第一次列印,由於存在變數提公升,第二句中的var v1 100會被提到頂部進行...