Javascript 这是结束吗?
下面的代码是闭包吗?为什么? var getContact=函数{ var person={name:John Doe}; 返回{aFriend:person}; }; console.loggetContact.aFriend.name; //输出:John DoeNo 在外部函数完成执行后,在另一个函数中没有可访问的函数声明 在本例中:Javascript 这是结束吗?,javascript,Javascript,下面的代码是闭包吗?为什么? var getContact=函数{ var person={name:John Doe}; 返回{aFriend:person}; }; console.loggetContact.aFriend.name; //输出:John DoeNo 在外部函数完成执行后,在另一个函数中没有可访问的函数声明 在本例中: function createClosure() { var foo = 0; function bar() { aler
function createClosure() {
var foo = 0;
function bar() {
alert(foo);
}
return bar;
}
var myFunc = createClosure();
…变量foo被关闭,因此有一个闭包。所有JavaScript函数都是闭包;它们保留了对创建时处于活动状态的的引用。因此,从技术上讲,这里创建了一个简单的闭包,但在该代码中,闭包不会持续任何时间。创建、调用并释放函数;没有任何东西维护对它的引用,因此它不存在,并且可以回收它引用的词法环境对象。在函数中创建对象不会为对象提供对函数或环境对象的引用,因此函数不会保留,也不会在内存中保留其封闭环境 与之相比: 功能输出{ setTimeoutfunction内部{ alertx; }, 100;
}傅 getContact是一个IIFE立即调用的函数表达式,它返回一个对象。这里没有创建引用外部函数的环境变量的内部函数。在我看来,这不应被视为结束,仍在等待可以证明这是结束的解释。不。。。这不是结束。您只是将该变量复制到对象的属性值。它有一个闭包。下面的代码不能是闭包,下面的代码可能有一个变量作为闭包,但代码本身不是闭包。语法问题。这是一个闭包吗?:var getContact=函数{var person={name:John Doe};var message=Hi message;函数Hi{alertmessage;}返回{aFriend:person,sayHi:Hi};};console.loggetContact.sayHi@图例:只要getContact保留对对象的引用,并且对象通过sayHi属性保留对对象的引用,hi函数就是一个持续存在的闭包。我的理解是,从技术上讲,每个函数都是一个闭包,但如果不返回内部函数,则闭包在函数执行结束后不会持续存在。函数有一个私有作用域==闭包?!实际上,我认为closure==函数的持久私有范围,这就是通常所理解的闭包。我希望我能解释清楚。