Javascript 为什么记录的是命名的IIFE而不是同名的变量?
我看到下面有人贴的代码。我不知道它记录了什么。它记录函数Javascript 为什么记录的是命名的IIFE而不是同名的变量?,javascript,iife,Javascript,Iife,我看到下面有人贴的代码。我不知道它记录了什么。它记录函数a,而不是200。为什么? var a=1; (职能a(){ a=200; 控制台日志(a) })()因为立即调用的函数是命名的,并且不能重新分配该名称以直接引用IIFE中的其他内容 任何命名函数表达式也将显示此行为。函数名为A的函数表达式将意味着直接在函数内部的A将始终引用函数本身,即使您尝试重新分配它 如果使用严格模式,则可以明确错误: “严格使用”; var a=1; (职能a(){ a=200; 控制台日志(a) })()如果有
a
,而不是200
。为什么?
var a=1;
(职能a(){
a=200;
控制台日志(a)
})()
因为立即调用的函数是命名的,并且不能重新分配该名称以直接引用IIFE中的其他内容
任何命名函数表达式也将显示此行为。函数名为A
的函数表达式将意味着直接在函数内部的A
将始终引用函数本身,即使您尝试重新分配它
如果使用严格模式,则可以明确错误:
“严格使用”;
var a=1;
(职能a(){
a=200;
控制台日志(a)
})()
如果有人想知道生命是什么?然后它的立即调用的函数表达式或自动执行的匿名函数,您可以指出有关此行为的一些规范。首先,我怀疑它不需要“立即调用”setTimeout((函数a(){a=200;console.log(a)}),1000)
也会起同样的作用。明白了,正如我所怀疑的,它适用于所有命名的函数表达式,而不仅仅是即时调用的函数表达式(我认为这在语言中不是一件事,只是一种用法)