1. 作用域
1.1 全局作用域
- 眾所周知,js在引入塊級(jí)作用域之前是沒(méi)有塊級(jí)作用域的。
- 全局作用域:在其他地方都能訪(fǎng)問(wèn)得到的地方。在js中,可以簡(jiǎn)單理解為在函數(shù)之外。
- 注意點(diǎn):
var a = 123
b = 1234
delete a // false
delete b // true
/*
以上兩種方式雖然都能在全局中訪(fǎng)問(wèn),但是有很大區(qū)別:
1. 采用var聲明的變量無(wú)法用delete刪除(因?yàn)樽兞渴菬o(wú)法刪除的)
2. 采用第二種方式產(chǎn)生的“變量”,本質(zhì)上是全局對(duì)象window的屬性,
所以可以用delete操作符進(jìn)行刪除
*/
function test() {
c = 233
}
test()
console.log(c) // 233
/*
在函數(shù)中不使用var進(jìn)行聲明的“變量”,作為window的屬性存在
*/
1.2 函數(shù)作用域
- 讓變量只在函數(shù)內(nèi)部可訪(fǎng)問(wèn) (金屋藏變量)
function test() {
var a = 3
return a + 4
}
console.log(test()) // 7
console.log(a) // Error: a is not defined
- 問(wèn)題:
a的生存期只在函數(shù)內(nèi)部,那么如何在函數(shù)外部拿到a的值?
答:使用return,或者使用閉包
1.3 塊級(jí)作用域
1.4 動(dòng)態(tài)作用域
window.a = 3
function test() {
console.log(this.a)
}
test()
test.bind({ a: 100})()
// this的指向改變了,函數(shù)在不同的情況下執(zhí)行得到的結(jié)果可以是不同的
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。