Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 这是结束吗?_Javascript - Fatal编程技术网

Javascript 这是结束吗?

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

下面的代码是闭包吗?为什么?

var getContact=函数{ var person={name:John Doe}; 返回{aFriend:person}; }; console.loggetContact.aFriend.name; //输出:John DoeNo

在外部函数完成执行后,在另一个函数中没有可访问的函数声明

在本例中:

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==函数的持久私有范围,这就是通常所理解的闭包。我希望我能解释清楚。