共同點(diǎn)
var/let/const的共同點(diǎn)是在全局作用域中定義的變量素跺,可以在函數(shù)中使用齐苛。
var bj = 'beijing';
function show(){
return bj;
}
console.log(show());
函數(shù)中聲明的變量怎披,只能在函數(shù)及其子函數(shù)中使用胸嘁。
function a(){
var web = '北京';
function show(){
console.log(web);
}
show(); //子函數(shù)結(jié)果:北京
console.log(web); //函數(shù)結(jié)果:北京
}
a();
console.log(web); //全局訪(fǎng)問(wèn) undefined
函數(shù)中聲明的變量就像聲明了私有領(lǐng)地,外部無(wú)法訪(fǎng)問(wèn)凉逛。
var
使用var聲明的變量存在于最近的函數(shù)或全局作用域中性宏,沒(méi)有塊級(jí)作用域的機(jī)制。
沒(méi)有塊級(jí)作用域很容易污染全局:
function run(){
web = 'beijing';
}
run();
console.log(web); //beijing
沒(méi)有塊作用域時(shí)状飞,var也能污染全局毫胜,使用let則不會(huì)
let i = 100;
for(let i=0;i<10;i++){
console.log(i); //0 1 2 3 4 5 6 7 8 9
}
console.log(i); //100
let
與var聲明的區(qū)別是 let/const 擁有塊作用域蝌借。
let 存在塊作用域特性,變量只在塊作用域內(nèi)有效
if(true){
let name = 'beijing';
console.log(name); //beijing
}
console.log(name); //name is not defined
塊內(nèi)部是可以訪(fǎng)問(wèn)上層作用域中的變量指蚁。
if(true){
let name = 'beijing';
(function(){
if(trrue){
console.log(`這是塊內(nèi)訪(fǎng)問(wèn):${name}`);
}
})();
}
console.log(name);
每一層都是獨(dú)立的作用域,里層作用域可以聲明外層作用域同名變量自晰,但不會(huì)改變外層變量凝化。
function run(){
web = 'beijing';
if(true){
let web = 'fangshan';
console.log(web); //fangshan
}
}
run();
console.log(web) //beijing
const
使用const聲明常量,比如可以聲明后臺(tái)接口url接口地址
1.常量名建議全部大寫(xiě)
2.只能聲明一次變量
3.聲明的同時(shí)必須賦值
4.不允許再次全新賦值
5.可以修改引用類(lèi)型變量的值
6擁有塊酬荞、函數(shù)搓劫、作用域
常量不允許全新賦值
try{
const URL = 'www.baidu.com';
URL = 'www.taobao.com'; //產(chǎn)生錯(cuò)誤
}catch(error){
throw new Error(error);
}
改變常量引用類(lèi)型的值
const INFO = {
url:'www.baidu.com',
port:'8080'
};
INFO.port = '443';
console.log(INFO);
傳值與傳址
基本數(shù)據(jù)類(lèi)型指數(shù)值、字符串等簡(jiǎn)單數(shù)據(jù)類(lèi)型混巧,引用類(lèi)型指對(duì)象數(shù)據(jù)類(lèi)型
基本類(lèi)型的復(fù)制是值的賦值枪向,互相不受影響。下例中將a變量的值賦值給b變量后咧党,因?yàn)榛绢?lèi)型的變量是獨(dú)立的秘蛔,所以a的改變不會(huì)影響b的值
let a = 100;
let b = a;
a = 200;
console.log(b);
對(duì)于引用對(duì)象來(lái)講,變量保存的是引用對(duì)象的指針傍衡。變量間賦值時(shí)其實(shí)賦值是變量的指針深员,這樣多個(gè)變量就引用同一個(gè)對(duì)象。
let a ={
web = "beijing";
}
let b = a;
a.web = "guangzhou";
console.log(b);