作用域與變量提升
阿新 • • 發佈:2018-03-11
ole 訪問 內置對象 function 執行 name 兩種 局部變量 ()
解析:
??函數內部省略var,會影響全局變量,name被重置為全局變量。js中,函數是一個作用域的基本單位,函數內聲明的所有變量在函數體內始終是可見的。
作用域與變量提升
作用域
JS中變量的作用域有全局作用域和局部作用域兩種,作用域簡單來講就是變量與函數的可訪問範圍。
- 全局作用域:
1.最外層函數和最外層函數外面定義的變量。
2.未聲明直接賦值的變量,自動聲明為全局變量。
3.window對象的內置對象,如window.name,window.location。 局部作用域:
一般會出現在函數內部,只有固定的代碼段才可以訪問。局部作用域變量優先於全局變量,函數只是一個作用域的基本單位。
例1:
var name = "one"; function test() { name = "two" } test(); console.log(name) //輸出為 two
解析:
??函數內部省略var,會影響全局變量,name被重置為全局變量。js中,函數是一個作用域的基本單位,函數內聲明的所有變量在函數體內始終是可見的。
例2:
function test() { var name = "one" ; return function () { console.log(name) } } test()();
test()之後將調用外層函數test返回內層函數function,再繼續(),相應調用執行了內層函數function(),輸出name。
變量提升
聲明提前是在js預編譯是就進行了,變量提升知識提升變量的聲明,並不會吧值也提上來。
例1:
var name = "one" ;
function () {
console.log(name) //one
name = "two" ;
console,log (name) //two
}
test();
var name = "one" ;
function () {
console.log(name) ; //undefine
var name = "two" ;
console.log(name) //two
}
test()
解析:
局部優先於全局,預編譯(變量提升),所以函數內的name為局部變量,所以第一個位undefine。
內部不影響外部
function test(name) {
console.log(name) //name
name = "two"
console.log(name) //two
}
var name = "one"
test(name)
console.log(name) //one
解析:
??傳進test的,實際上是一個副本,函數返回後這個副本就被清除了,並非實際的name。
作用域與變量提升