javascript 基礎(chǔ)攻關(guān)(三)——作用域和閉包

javascript 基礎(chǔ)攻關(guān)(三)——作用域和閉包

??

題目:

  1. 說一下對變量提升的理解
  2. 說明this的幾種不同的使用場景
  3. 創(chuàng)建10個<a>標(biāo)簽,點擊的時候彈出來對應(yīng)的序號
  4. 如何理解作用域
  5. 實際開發(fā)中閉包的應(yīng)用

執(zhí)行上下文

  • 范圍:一段<script>或者一個函數(shù)
  • 全局:變量定義、函數(shù)聲明 一段<script>
  • 函數(shù):變量定義、函數(shù)聲明、this、arguments 函數(shù)

注意:“函數(shù)聲明”和“函數(shù)表達式”的區(qū)別

console.log(a);  //undefined
var a = 100;

fn("zhangsan");   //zhangsan,20

function fn(name) {
    age = 20;
    console.log(name, age);
    var age
}

this

  • this要在執(zhí)行時才能確認,定義時無法確認
  • 作為構(gòu)造函數(shù)執(zhí)行
  • 作為對象屬性指向
  • 作為普通函數(shù)執(zhí)行
  • call apply bind
```js
var a = {
    name: "A",
    fn: function() {
        console.log(this.name)
    }
}

a.fn(); //this===A
a.fn.call({ name: "B" }); //this==={name:"B"}
var fn1 = a.fn;
fn1(); //this===window

```

作用域

  • 沒有塊級作用域

  • 只有函數(shù)和全局作用域

    //無塊級作用域
    if(true){
        var name = 'zhangsan';
    }
    console.log(name);
    
    // 函數(shù)和全局作用域
    var a=100;
    function fn() {
        var a=10;
        console.log('fn',a);
    }
    console.log('global',a);    //100
    fn();  //10
    

作用域鏈

```js
var a = 100;

function fn() {
    var b = 200;
    // 當(dāng)前作用域沒有定義的變量,即“自由變量”
    console.log(a);
    console.log(b);
}
fn() //100,200
```

閉包

使用場景

  • 函數(shù)作為返回值
  • 函數(shù)作為參數(shù)傳遞
    ```js
    function F1() {
        var a = 100;
        // 返回一個函數(shù)
        return function() {
            console.log(a);
        }
    }
    //f1 得到一個函數(shù)
    var f1 = F1();
    var a = 200;
    f1();  //100
    
    ```

解題

  1. 說一下對變量提升的理解

    • 變量定義
    • 函數(shù)聲明
  1. 說明this的幾種不同的使用場景

    • this要在執(zhí)行時才能確認,定義時無法確認
    • 作為構(gòu)造函數(shù)執(zhí)行
    • 作為對象屬性指向
    • 作為普通函數(shù)執(zhí)行
    • call apply bind
  2. 創(chuàng)建10個<a>標(biāo)簽,點擊的時候彈出來對應(yīng)的序號

    var i;
    

for (i = 0; i < 10; i++) {
(function(i) {
var a = document.createElement('a')
a.innerHTML = i + '
';
a.addEventListener('click', function(e) {
e.preventDefault();
alert(i);
})
document.body.appendChild(a);
})(i)
}

        


4. 如何理解作用域

    * 自由變量
    * 作用域鏈,即自由變量的查找
    * 閉包的兩個場景

5. 實際開發(fā)中閉包的應(yīng)用

    封裝變量,收斂權(quán)限
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容