JavaScript 作用域
JavaScript 作用域
在 JavaScript 中, 對象和函數(shù)同樣也是變量。
在 JavaScript 中, 作用域為可訪問變量,對象,函數(shù)的集合。
JavaScript 函數(shù)作用域: 作用域在函數(shù)內(nèi)修改。
在JavaScript中,用var申明的變量實際上是有作用域的。
如果一個變量在函數(shù)體內(nèi)部申明,則該變量的作用域為整個函數(shù)體,在函數(shù)體外不可引用該變量:
'use strict';function foo() {
var x = 1;
x = x + 1;
}
x = x + 2; // ReferenceError! 無法在函數(shù)體外引用變量x
如果兩個不同的函數(shù)各自申明了同一個變量,那么該變量只在各自的函數(shù)體內(nèi)起作用。換句話說,不同函數(shù)內(nèi)部的同名變量互相獨立,互不影響:
'use strict';function foo() {
var x = 1;
x = x + 1;
}function bar() {
var x = 'A';
x = x + 'B';
}
JavaScript 局部作用域
變量在函數(shù)內(nèi)聲明,變量為局部作用域。
局部變量:只能在函數(shù)內(nèi)部訪問。
// 此處不能調(diào)用 carName 變量
function myFunction() {
var carName = "Volvo";
// 函數(shù)內(nèi)可調(diào)用 carName 變量
}
注意:
因為局部變量只作用于函數(shù)內(nèi),所以不同的函數(shù)可以使用相同名稱的變量。
局部變量在函數(shù)開始執(zhí)行時創(chuàng)建,函數(shù)執(zhí)行完后局部變量會自動銷毀。
全局作用域
不在任何函數(shù)內(nèi)定義的變量就具有全局作用域。實際上,JavaScript默認(rèn)有一個全局對象window,全局作用域的變量實際上被綁定到window的一個屬性:
'use strict';
var course = 'Learn JavaScript';
alert(course); // 'Learn JavaScript'
alert(window.course); // 'Learn JavaScript'
因此,直接訪問全局變量course和訪問window.course是完全一樣的。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文網(wǎng)(php.cn)</title> </head> <body> <p>全局變量在任何腳本和函數(shù)內(nèi)均可訪問。</p> <p id="demo"></p> <script> var carName = "Volvo"; myFunction(); function myFunction() { document.getElementById("demo").innerHTML = "這里是 " + carName; } </script> </body> </html>
JavaScript 變量生命周期
JavaScript 變量生命周期在它聲明時初始化。
局部變量在函數(shù)執(zhí)行完畢后銷毀。
全局變量在頁面關(guān)閉后銷毀。
函數(shù)參數(shù)
函數(shù)參數(shù)只在函數(shù)內(nèi)起作用,是局部變量。