js中變數的作用域有全域性作用域和區域性作用域兩種,作用域簡單來講就是變數與函式的可訪問範圍。
區域性作用域變數優先於全域性變數,函式只是乙個作用域的基本單位。例1:
var name = "one";
function test()
test();
console.log(name) //輸出為 two
解析:
函式內部省略var,會影響全域性變數,name被重置為全域性變數。js中,函式是乙個作用域的基本單位,函式內宣告的所有變數在函式體內始終是可見的。
例2:
function test()
}test()();
test()之後將呼叫外層函式test返回內層函式function,再繼續(),相應呼叫執行了內層函式function(),輸出name。
宣告提前是在js預編譯是就進行了,變數提公升知識提公升變數的宣告,並不會吧值也提上來。例1:
var name = "one" ;
function ()
test();
var name = "one" ;
function ()
test()
解析:
區域性優先於全域性,預編譯(變數提公升),所以函式內的name為區域性變數,所以第乙個位undefine。
function test(name)
var name = "one"
test(name)
console.log(name) //one
解析:
傳進test的,實際上是乙個副本,函式返回後這個副本就被清除了,並非實際的name。
作用域與變數提公升
js中變數的作用域有全域性作用域和區域性作用域兩種,作用域簡單來講就是變數與函式的可訪問範圍。宣告提前是在js預編譯是就進行了,變數提公升知識提公升變數的宣告,並不會吧值也提上來。例1 var name one function test var name one function test 解析 ...
變數提公升 作用域
console.log a undefined console.log window.a undefined console.log a in window true 在變數提公升階段,在全域性作用域中宣告了乙個變數a,此時就已經把a當做屬性賦值給window了,只不過此時還沒有給a賦值,預設值un...
js變數作用域 變數提公升
1 js作用域 在es5中,js只有兩種形式的作用域 全域性作用域和函式作用域,在es6中,新增了乙個塊級作用域 最近的大括號涵蓋的範圍 但是僅限於let方式申明的變數。2 變數宣告 1 var x 變數宣告 2var x 1 變數宣告並賦值 3 x 1 定義全域性變數並賦值 3 函式宣告 func...