JavaScript的變數作用域詳解

2021-08-25 19:33:56 字數 1528 閱讀 4105

定義在所有函式之外的變數,全域性作用域的變數能夠在所有的js指令碼中使用:

var num=2;//全域性變數

function fn()

fn();

console.log(num);//列印變數num

不管在函式體裡面還是外面,num在控制台上列印結果都為2,可見全域性變數可以在指令碼任何地方呼叫並可賦與新值;但也會出現如下現象:

var num=2;//全域性變數

function fn()

fn();

console.log(num);//列印變數num

函式體裡面列印的num值為1,函式體外列印的num值為2;這兒也許大家就要會有疑問了,既然num是全域性變數並被賦值為2,可是在函式體裡面num值為什麼變成了1呢,這是因為num在函式體裡面被重新申明了var num = 1;num在函式體裡面被當作區域性變數使用了,所以在函式體外面作為全域性變數的num仍然為2。

定義在函式體內部的變數,只在函式內部有作用,超出函式體的範圍不能進行使用

function fn()

fn();

console.log(num);

函式體裡面控制台列印num為1,函式體外面控制台則會報語法錯誤,由此可見區域性變數只供函式內部呼叫。

將所有使用 var 定義的變數宣告部分提公升到對應作用域的最頂部,變數賦值位置不變。

function test() 

console.log("迴圈後:" + i);

}test();

控制台列印結果如下

函式體裡在for迴圈前,控制台列印 i 值為undefined,這是因為使用 var 定義的變數宣告部分提公升到對應作用域的最頂部,變數賦值位置不變。上面**等同於如下**

function test() 

console.log("迴圈後:" + i);

}test();

let/const 定義變數(es6,有瀏覽器相容問題)

如果用let定義變數則不會出現申明提公升現象 ,因為使用let/const定義的變數只能在塊級中被呼叫,即這兒的for迴圈中,for迴圈外不能被呼叫。

function test() 

console.log("迴圈後:" + i);

}test();

此時for迴圈前console.log("迴圈前:" + i);**段則會報錯,因為在此之前 i 並沒有被申明為變數。

使用let\const變數注意事項

1、let定義的是變數,即以後還可以修改變數中的值

2、const定義的是常量,即一旦變數中的值賦值確定,則以後不能再修改

JavaScript 變數的作用域

1.全域性作用域 global scope 在 中任何地方都能訪問到的物件擁有全域性作用域,一般來說以下幾種情形擁有全域性作用域 1 最外層函式和在最外層函式外面定義的變數擁有全域性作用域,例如 1 2 3 4 5 6 7 8 9 10 11 12 varauthorname 山邊小溪 functi...

Javascript變數作用域

1.變數作用域是什麼鬼?2.全域性變數 全域性變數擁有全域性作用域 作用範圍在整個頁面中 在 的任何地方都有定義。擁有全域性作用域的情形 1 宣告在函式外部的變數。eg var a 全域性變數 function b 2 宣告變數時,缺少關鍵字var。eg function b 函式引數的變數 fun...

JavaScript之變數 作用域

一.變數 1.基本型別值和引用型別值 js和其他語言一樣也分值型別和引用型別。在基本概念那篇部落格也紀錄了五種常見的基本資料型別 undefined null boolean number string。這五種都是按值訪問的基本資料型別,可以操作保持在變數中的實際的值.js和其他語言c 不同的是st...