【发布时间】:2020-06-25 10:12:02
【问题描述】:
我想知道下面两段代码的区别:
function foo() {
var a = 'private variable';
return function a(){
console.log(a)
}
}
foo()(); // output: function a(){...}
对
function foo() {
var a = 'private variable';
function a(){};
return () => {console.log(a)}
}
foo()(); // output: private variable
在第一个代码块中,根据提升,函数定义应该被提升,然后var a = 'private variable'重写a,但是为什么console.log(a)输出函数定义?
【问题讨论】:
-
我想这会对你有所帮助perfectionkills.com/understanding-delete
-
有一些激活对象的概念,它在一个范围内设置变量的属性,无论是在全局、函数还是 eval 范围内..对于属性的最终值,每个都有自己的规则。跨度>
-
我相信这就是作者正在寻找的确切答案stackoverflow.com/a/40675896/7364894