var ==只有全局和函數(shù)內(nèi)量?jī)煞N區(qū)別== 在函數(shù)內(nèi)的變量定義盡量不用 var
if( true ){
var a = 1;
}
alert(a); //1
for(var i=0; i<10; i++){
}
alert(i); //9
let 塊級(jí)作用域
- 沒有預(yù)解析,不會(huì)自動(dòng)提升變量置侍;在代碼塊內(nèi)定義的 let ==變量必須在使用之前定義==衍慎,否則會(huì)報(bào)錯(cuò);
if(true){
alert(a);
let a =1;
}
//報(bào)錯(cuò)虏冻,變量不存在
if(true){
alert(a); //1
var a =1;
}
2.let ==定義變量不能在同級(jí)作用域內(nèi)重復(fù)定義==(可以賦值)
if(true){
let a =1;
let a =2;
alert(a);
}
//報(bào)錯(cuò)墓怀,重復(fù)定義
if(true){
let a =1;
{
let a =2;
}
alert(a); // 1
}
- for ==循環(huán)的小括號(hào)和大括號(hào)不是同一個(gè)作用域==
for(let i=0; i<10; i++){
let i = a;
alert(i); //彈出10次a捉蚤,而不是0-9
}
塊級(jí)作用域
while(){
//TODO
}
for(;;){
//TODO
}
if(){
//TODO
}
{
//TODO
}
//立即執(zhí)行函數(shù)也是一種塊級(jí)作用域的實(shí)現(xiàn)方式
//實(shí)質(zhì)上是將函數(shù)聲明轉(zhuǎn)換成函數(shù)表達(dá)式抬驴;()、缆巧!布持、+、-陕悬、=其實(shí)都可以题暖,括號(hào)最安全不會(huì)與函數(shù)返回值運(yùn)算,造成不必要的麻煩
(function(a){
console.log(a); //123,使用()運(yùn)算符
})(123);
(function(a){
console.log(a); //1234捉超,使用()運(yùn)算符
}(1234));
const 用來定義常量胧卤,不能被更改,不能先定義后賦值
const a = 1;
a =2;
alert(a);
//報(bào)錯(cuò)
const a ;
a =2;
alert(a);
//報(bào)錯(cuò)
真的不能修改嗎拼岳?枝誊??
const arr = ['aaa','bbb'];
arr.push('ccc');
console.log(arr);
//'aaa','bbb','ccc'
//對(duì)象的引用特性
const arr = Object.freeze(['aaa','bbb']};
arr.push('ccc');
console.log(arr);
//報(bào)錯(cuò)惜纸,不可擴(kuò)展