聲明
- 以下代碼是在非嚴(yán)格模式下測(cè)試運(yùn)行,進(jìn)入嚴(yán)格模式使用"use strict"
- delete刪除變量時(shí),刪除成功返回true,失敗false,
- Object.getOwnPropertyDescriptor(obj,propertyname)獲取屬性特性,當(dāng)其中configurable為false時(shí)delete無(wú)法刪除
1 帶var
帶var定義的變量只有函數(shù)內(nèi)作用域和全局作用域,作為全局變量時(shí)掛載在window對(duì)象上,configurable為false
var x; //正確,可以不用初始化.x為undefined
var x=3; //掛載到window.x,x===window.x===3
{
var x=4; //var定義的變量不具備代碼塊內(nèi)作用域,x被重新定義
} //x===window.x===4
//匿名箭頭函數(shù),定義后運(yùn)行
(()=>{
var x=5; //此x為局部變量,函數(shù)內(nèi)作用域
console.log(x)
})() //輸出5
console.log(x) //輸出4
console.log(window.x) //輸出4
Object.getOwnPropertyDescriptor(window,'x')
//{value: 4, writable: true, enumerable: true, configurable: false}
delete x; //return false,因?yàn)閏onfigurable為false,刪除失敗
2 不帶var
不帶var定義的變量,全局作用域,掛載在window對(duì)象上,configurable為true
x=3; //掛載于window.x
//匿名箭頭函數(shù)打毛,定義后運(yùn)行
(()=>{
x=5; //x被改變
console.log(x)
})() //輸出5
console.log(x); //輸出5
Object.getOwnPropertyDescriptor(window,'x')
//{value: 5, writable: true, enumerable: true, configurable: true}
delete x; //return true,刪除成功,因?yàn)閏onfigurable為true
3 let
let定義的變量具有塊級(jí)作用域,不能重復(fù)定義,configurable為false
let x; //正確,可以不用初始化.x為undefined
let x=5; //報(bào)錯(cuò),不能重復(fù)定義
let i=3; //全局作用域
{
let i=4; //作用域?yàn)榛ɡㄌ?hào)內(nèi)
console.log(i); //輸出4
}
//匿名箭頭函數(shù)柿赊,定義后運(yùn)行
(()=>{
let i=5; //局部變量
console.log(i)
})() //輸出5
console.log(i) //輸出3
delete i; //return false
4 const
const擁有l(wèi)et所有性質(zhì),但const不能被直接修改,必須被初始化,configurable為false
const i=1;
i=5; //報(bào)錯(cuò),const定義的不能直接修改
const p={
name:"Minions",
age:8
} //定義字面量對(duì)象p
p={
name:"xx"
} //報(bào)錯(cuò),不能直接修改p
p.age=16; //正確修改
delete p; //return false
結(jié)束
若發(fā)現(xiàn)錯(cuò)誤,請(qǐng)糾正