Java技術分享:淺談JavaScript作用域

javascript是目前web領域中使用非常廣泛的語言,不管是在前端還是在後端都能看到它的影子,可以說web從業者不論怎樣都繞不開它。在前端領域,各種框架層出不窮。在後端領域,nodejs可謂如火如荼,打破了人們對javascript只能作爲前端語言的認知。按照此勢頭下去,javascript會越來越流行,會隨着web的發展越來越重要。

所以不論你是想學各種前端框架還是nodejs,都需要深入理解javascript的工作原理以及特性,只有這樣才能以不變應萬變。

今天給大家分享的是:淺談JavaScript作用域


什麼是作用域?

Js中的變量或者函數能夠被訪問到的代碼空間(變量或者函數有效的範圍)。

JavaScript中的作用域

全局作用域;

局部作用域;

當一個變量在函數最外層定義時,變量就在全局作用域中,在一個函數內部定義一個變量,這個變量就在局部變量中。


全局作用域

最外層函數或者在其外部定義的變量具有全局作用域。

var a = 10; //全局變量

function foo(){ //全局函數

console.log(a);

}

這個變量a就在全局作用域中,可以說成是個全局變量,這個a可以子啊認可地方訪問或修改。

還有一點,window對象的屬性和方法具有全局作用域

Eg:

alert("dddddd");

window.alert("aaaa");

var obj = {

name:"john",

age:20,

sayHello:function(x){

console.log(x);//輸出undefined//第二次輸出1//第三次輸出aaa(要問我爲什麼會輸出三次,因爲聲明提升的問題,請自行百度)

}

};

console.log(obj.name);//輸出jogn

obj.sayHello();

console.log(obj.sayHello(1))//輸出undefined

obj.sayHello("aaaaa");

在一個函數內部聲明一個變量不用 var來定義,這個變量具有全局作用域

function foo(){

b = 20;

var a = 10;

}

foo();

console.log(b);

console.log(a);//a會報錯,因爲a 是一個局部變量

局部作用域

定義在函數中的變量就在局部作用域中。並且函數在每次調用時都有一個不同的作用域。這意味着同名變量可以用在不同的函數中。因爲這些變量綁定在不同的函數中,擁有不同作用域,彼此之間不能訪問。(在一個函數顳部定義的函數或者用var定義的變量具有局部作用域)

Eg:

在ES5中函數去區分全局和局部的唯一的代碼塊

if(true){

var a = 10;

}

for(var i =0; i<=0; i++){

var b = 10;

}

console.log(a,b);//a,b都是輸出10

函數的形參具有局部作用域,是局部變量

function foo(x){

console.log(x);//輸出undefined

}

foo();

console.log(x);//報錯

補充一點塊語句

塊級聲明包括if和switch,以及for和while循環,和函數不同,它們不會創建新的作用域。在塊級聲明中定義的變量從屬於該塊所在的作用域。

Eg:

if(true){

Var name = "join";

}

Console.log(name)//輸出join

Es6中引用了let,const關鍵字,這些關鍵字可以代替var,但是和var不同的是,let和const具有塊級作用域,也就是說在塊級聲明中創建並使用時,是具有全局作用域的

在全局作用域聲明的變量可以稱爲全局變量,同理還有全局變量,和函數形參,他們所站的比重是局部變量>函數形參>全局變量。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章