最近話不多,直接看代碼和結(jié)果好伐?
一、var
定義:
//一般情況
var word = "Hello World";
console.log(word);
//輸出:Hello World
//變量提升?
console.log(word);
var word = "Hello World";
//輸出:undefined
//變量提升!
word = "哈哈哈";
console.log(word);
var word = "Hello World";
//輸出:哈哈哈
//所謂的全局變量,已經(jīng)在window對(duì)象上了
var word = "Hello World";
console.log(window.word);
//輸出:Hello World
//不寫var
word = "Hello World";
console.log(word);
console.log(window.word);
//輸出:
//Hello World
//Hello World
函數(shù):
//一般情況
var word = "Hello World";
function PLAYFULHD() {
console.log(word);
}
PLAYFULHD();
//輸出:Hello World
//變量提升?
PLAYFULHD();
var word = "Hello World";
function PLAYFULHD() {
console.log(word);
}
//輸出:undefined
//變量提升?
PLAYFULHD();
function PLAYFULHD() {
console.log(word);
}
var word = "Hello World";
//輸出:undefined
//變量提升!
word = "嘿嘿嘿";
PLAYFULHD();
function PLAYFULHD() {
console.log(word);
}
var word = "Hello World";
//輸出:嘿嘿嘿
//不寫var
word = "Hello World";
function PLAYFULHD() {
var word = "嘿嘿嘿";
console.log(word);
}
PLAYFULHD();
console.log(word);
//輸出:
//嘿嘿嘿
//Hello World
重復(fù)定義:
//重復(fù)定義1
var word = "Hello World";
console.log(word);
var word = "哦吼吼";
console.log(word);
//輸出:
//Hello World
//哦吼吼
//重復(fù)定義2
var word = "Hello World";
console.log(word);
function PLAYFULHD() {
var word = "哦吼吼";
//let word = "哦吼吼"; //效果一樣
console.log(word);
}
PLAYFULHD();
console.log(word);
//輸出:
//Hello World
//哦吼吼
//Hello World
總結(jié):
- 全局變量:指變量在函數(shù)外定義, 網(wǎng)頁(yè)中所有腳本和函數(shù)均可使用;當(dāng)頁(yè)面關(guān)閉后銷毀
- 局部變量:指變量在函數(shù)內(nèi)定義,重復(fù)定義了相同的變量并不改變?nèi)肿兞康闹担划?dāng)函數(shù)執(zhí)行結(jié)束后銷毀;
- 變量提升?只要存在賦值的操作,就能直接使用,其實(shí)可以理解為默許了沒有var就可以定義變量;
- 一般在定義全局變量時(shí),放在script標(biāo)簽下的最前面,且局部變量的命名不和全局變量重復(fù);
- 對(duì)于數(shù)組和對(duì)象,和原始類型的情況不一樣,下面是執(zhí)行代碼:(數(shù)組和對(duì)象的情況類似)
//正常情況
arr = ["HHHH"];
console.log(arr);
var arr = ["哈哈哈", "嘿嘿嘿", "哦吼吼"];
//輸出:["HHHH"]
//直接報(bào)錯(cuò)
arr[0] = "HHHH";
console.log(arr);
var arr = ["哈哈哈", "嘿嘿嘿", "哦吼吼"];
//輸出:Uncaught TypeError: Cannot set property '0' of undefined
二、let
必須先定義,再使用;其它情況同var
//直接報(bào)錯(cuò)
word = "哈哈哈";
console.log(word);
let word = "Hello World";
//輸出:Uncaught ReferenceError: Cannot access 'word' before initialization
//不綁定到window
let word = "Hello World";
console.log(word);
console.log(window.word);
//Hello World
//undefined
三、總結(jié)
- var是全局變量,在window對(duì)象上可以訪問到
- var:定義時(shí)可以不加,直接進(jìn)行賦值操作
- let:定義的語(yǔ)句必須先聲明,否則報(bào)錯(cuò);不在window對(duì)象上
- 局部定義的變量,即函數(shù)內(nèi),在執(zhí)行完畢后就銷毀,注意匿名函數(shù)也是如此
- const與let相似,定義的語(yǔ)句必須先聲明