You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
vara=1;(functiona(){'use strict';a=2;console.log(a);})();VM1059:4UncaughtTypeError: Assignmenttoconstantvariable.ata(<anonymous>:4:7)
at <anonymous>:6:3
bigMeowCoding, algok-876, Jancat, sinSquid, xiankui and 34 morejesse-li, lilywww and imcycle
Activity
Genzhen commentedon Jun 22, 2020
答案
解析
立即调用的函数表达式(IIFE) 有一个 自己独立的 作用域,如果函数名称与内部变量名称冲突,就会永远执行函数本身;所以上面的结果输出是函数本身;
cxs8462 commentedon Jul 13, 2020
受教了
kflizongbao commentedon Jul 19, 2020
应该作用域的角度去解释,a是全局作用域,a函数内部自然找不到变量a,所以输出函数a
GolderBrother commentedon Jul 21, 2020
立即执行的函数表达式(IIFE)的函数名称跟内部变量名称重名后,函数名称优先,因为函数名称是不可改变的,内部会静默失败,在严格模式下会报错
MillionQW commentedon Jun 6, 2021
这道用函数作用域解释比较合理? a 是在全局环境定义的,IIFE 执行的时候,先找当前作用域下有没有变量 a,此时 a 就是当前函数,所以不用继续往上一层作用于继续寻找了,所以打印了函数本身。
所以如果变量 a 是在 IIFE 里定义的话,就会输出新变量 a:
zhujianxiong commentedon Jun 8, 2021
为啥严格模式下会报错呢?
SnailOwO commentedon Nov 16, 2021