1. document對(duì)象 && window對(duì)象
所有的全局函數(shù)和對(duì)象都屬于window
對(duì)象的屬性和方法扮匠。
區(qū)別:
-
window
指窗體。window
對(duì)象表示瀏覽器中打開(kāi)的窗口芙贫。 -
document
指頁(yè)面。document
是window
的一個(gè)子對(duì)象傍药、一個(gè)對(duì)象屬性磺平。
2. var與let魂仍、const的區(qū)別
2.1 var聲明變量存在變量提升,let和const不存在變量提升
什么是變量提升拣挪?
JavaScript
中擦酌,函數(shù)及變量的聲明都將被提升到函數(shù)的最頂部。
JavaScript
中菠劝,變量可以在使用后聲明赊舶,也就是變量可以先使用再聲明。
console.log(a); // undefined ===> a已聲明還沒(méi)賦值赶诊,默認(rèn)得到undefined值
var a = 100;
console.log(b); // 報(bào)錯(cuò):b is not defined ===> 找不到b這個(gè)變量
let b = 10;
console.log(c); // 報(bào)錯(cuò):c is not defined ===> 找不到c這個(gè)變量
const c = 10;
再來(lái)看這段代碼
function fn() {
//var a
if (true) {
console.log(a + ' now')
}
else {
var a = 1
console.log(2)
}
}
fn() // a -> undefined
我們發(fā)現(xiàn)不執(zhí)行的代碼也會(huì)影響會(huì)執(zhí)行的代碼笼平,因?yàn)?code>var a會(huì)提升到if
語(yǔ)句的前面。
undefined
可以翻譯為不明確舔痪,not defined
可以翻譯為未定義
在Java
中變量分為全局變量(成員變量)或者局部變量寓调,在方法體中定義的變量都是局部變量,否則是全局變量(即在方法體外锄码,在類中定義的變量)
在JavaScript
中夺英,在方法體外外用var
定義的變量其它方法可以共享,在方法中用var
定義的變量只有該方法內(nèi)生效巍耗。
2.2 let秋麸、const都是塊級(jí)局部變量
顧名思義,就是只在當(dāng)前代碼塊起作用
{
let a = 1
}
console.log(a) // undefined
const
的特性和 let
完全一樣炬太,不同的只是:
1)聲明時(shí)候必須賦值
const a
編譯器報(bào)錯(cuò)
控制臺(tái)報(bào)錯(cuò)
SyntaxError: Missing initializer in const declaration
2)只能進(jìn)行一次賦值,即聲明后不能再修改
const a=1
a=2
編譯器報(bào)錯(cuò)
控制臺(tái)報(bào)錯(cuò)
TypeError: Assignment to constant variable.
3)如果聲明的是復(fù)合類型數(shù)據(jù)驯耻,可以修改其屬性
2.3同一作用域下let和const不能聲明同名變量亲族,而var可以
const a =2
const a=1
SyntaxError: Identifier 'a' has already been declared