1. 程式人生 > 其它 >工作中積累的問題、知識點總結100題(21-40)

工作中積累的問題、知識點總結100題(21-40)

21.非匿名自執行函式

  1.函式名只讀

// b 列印的值是什麼
var b = 10;
(function b(){
    b = 20;
    console.log(b)
})()

解析:

- 如標題一樣,非匿名自執行函式,函式名不可以修改,嚴格模式下會TypeError,
- 非嚴格模式下,不報錯,修改也沒有用。
- 查詢變數b時,立即執行函式會有內部作用域,會先去查詢是否有b變數的宣告,有的話,直接複製
- 確實發現具名函式Function b(){} 所以就拿來做b的值
- IIFE的函式內部無法進行復制(類似於const)
列印結果為:Function b

  2.

//  列印的值
var b = 10;
(function b(){
    var b = 20;
    console.log(window.b)
    console.log(b)
})()
輸出:
10
20

  3.

  var b = 10;
  (function b(){
      console.log(b)
      b = 5
      console.log(window.b)
      var b = 20
      console.log(b)
  })()

22.變數提升(21.10.22 更新)

var name = 'World!';
(function
() { if (typeof name === 'undefined') { var name = 'Jack'; console.log('Goodbye ' + name); } else { console.log('Hello ' + name); } })();

上面得程式碼相當於

var name = 'World!';
(function () {
    var name;
    if (typeof name === 'undefined') {
        name = 'Jack';
        console.log(
'Goodbye ' + name); } else { console.log('Hello ' + name); } })();

  2.看下第二個示例

var str = 'World!';   
(function (name) {
    if (typeof name === 'undefined') {
        var name = 'Jack';
        console.log('Goodbye ' + name);
    } else {
        console.log('Hello ' + name);
    }
})(str);




//Hello World 因為name已經變成函式內區域性變數