變量和函數都具備做用域 做用域就是變量和函數的可被訪問的範圍 控制着變量和函數的可見性和生命週期。
變量的做用域可被分爲全局做用域和局部做用域(函數做用域) 若是變量是被定義在全局做用域的話 在JavaScript代碼中的任何位置均可以訪問該變量 若是變量被定義在指定函數內部 在JavaScript代碼中只能在該函數內部訪問該變量。
函數的做用域也可被分爲全局做用域和局部做用域(函數做用域) 被定義在指定函數內部的函數被稱爲局部函數或內部函數。函數
在全部函數以外聲明的變量,叫作全局變量,由於他可被當前文檔中的其餘代碼所訪問。code
在函數內部聲明的變量被成爲局部變量,它只能在函數的內部進行訪問。生命週期
JavaScript變量的另外一個特別之處是,能夠小猴聲明的變量,而不會引起異常,這一律念被稱爲生命提早。
示例代碼ip
console.log(num);// undefined var num = 100;/* 定義全局變量 */ /* 定義函數 */ function fun(){ // 全局變量與局部變量同名時 - 在當前函數做用域中只能訪問局部變量 console.log(num);// undefined var num = 200;/* 定義局部變量 */ // 就近原則 console.log(num);// 200 } /* 調用函數 */ fun(); // 局部變量在全局做用域中沒法訪問 - 只能訪問全局變量 console.log(num);// 100
按置傳遞就是指將實參變量的值複製一份副本給函數的形參變量。JavaScript中爲函數傳遞參數時,都是按值傳遞的。若是向函數傳遞的參數時原始類型數據,則在函數中修稿參數變量的值,不會影響外部實參的變量。
示例代碼作用域
var num = 100;/* 定義一個全局變量 */ function fun(num){ num++; console.log('函數內部的值: ' + num);// 101 } fun(num);/* 實參 */ /* 調用指定全局變量 */ console.log('全局做用域的值: ' + num);// 100 101 var v = 200; function fn(){ v++; } fn(); console.log(v);// 201