工作中積累的問題、知識點總結100題(21-40)
阿新 • • 發佈:2021-10-22
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已經變成函式內區域性變數