const a = 1(function A() { console.log(A); // [Function A] A = 1; console.log(window.A); // undefined console.log(A); // [Function A] console.log(window.a); // 1 console.log(a); // 1}())
如上所示,立刻执行具名函数式时不会在window上增加属性,且具名函数内不可对作为函数名的标识符来做批改,所以A=1有效。
而失常执行的具名函数外部为何能够批改作为函数名的标识符呢,我的猜测是,定义一个函数是,将它写在了windows上作为一个属性。所以咱们批改的是window上的属性函数A,而不是函数A的标识。
function A(){ console.log(A) // [Function A] console.log(window.A) // [Function A] A = 1 console.log(A) // 1 console.log(window.A) // 1}A()
因没有文档就立刻执行具名函数与具名函数做过具体解说,所以以上全是集体猜测,欢送各位大佬批评指正