level 1
function A(){
function B(){}
}
var c=A();
var d=A();
console.log(c==d)
这样是true我明白
function A(){
function B(){}
return B;
}
var c=A();
var d=A();
console.log(c==d)
为什么将B作为返回值,输出为false?
怎么到了这里两个成了独立的函数?
2020年07月20日 12点07分
1
level 12
函数的默认返回值是未定义undefined == undefined当然为真了
你第二个每次调用A函数 创建新的局部B函数 作为返回值返回 函数也是特殊对象是引用类型 比的是地址 你两次调用的A都是新的B函数 并不是同一个所以为false
2020年07月20日 14点07分
3
意思是每次调用的a函数是同一个地址,然后再a里面创建了新的b函数?
2020年07月20日 15点07分
@想要阳光快乐 你可以这么理解 建议在去看一下原始类型 和 引用类型还有就是词法作用域之类的
2020年07月20日 15点07分
level 5
第二个是闭包,不会被销毁。比如function A() {
let n=1
function B() {
console(n++)}
return B}
let a = A()//2
let b = A() //3
2020年07月21日 00点07分
4