2 回答

TA貢獻1799條經(jīng)驗 獲得超6個贊
在早期(es6之前),Block-level 的函數(shù)是一個語法錯誤,但是被瀏覽器兼容且能夠執(zhí)行。所以你的代碼運行環(huán)境在 es5, 就會出現(xiàn)這種 foo(4) 的值為 4 的怪異現(xiàn)象。假若我們讓代碼執(zhí)行在 'use strict' 環(huán)境。
'use strict'
console.log(typeof foo)? // 'undefined'
{
? ? foo(2)? ? //2
? ? function foo(v) {
? ? ? ? console.log(v)
? ? }
? ? foo(3)? ? //3
}
console.log(typeof foo) // 'undefined'
也就是說,執(zhí)行完塊級作用域后,函數(shù) foo() 就被銷毀了。所以,如果要使用 Block-level 函數(shù)時,更好的替代是函數(shù)表達式。
foo(1)? ? //報錯
{
? ? foo(2)? ? // 報錯
? ? let foo = function (v) {
? ? ? ? console.log(v)
? ? }
? ? foo(3)? ? //3
}
foo(4) // 報錯
至于為什么在非 strict mode,foo(4) 不報錯,這應該就涉及到瀏覽器實現(xiàn)問題,對于我們理解這個問題并不重要。
添加回答
舉報