相关疑难解决方法(0)

JavaScript闭包如何工作?

您如何向知道其所包含概念的人(例如函数,变量等)解释JavaScript闭包,但不了解闭包本身?

我已经看过维基百科上给出的Scheme示例,但遗憾的是它并没有帮助.

javascript variables closures scope function

7644
推荐指数
82
解决办法
139万
查看次数

'闭包'和'lambda'有什么区别?

有人能解释一下吗 我理解它们背后的基本概念,但我经常看到它们互换使用,我感到困惑.

现在我们在这里,它们与常规功能有什么不同?

lambda closures functional-programming function

774
推荐指数
12
解决办法
12万
查看次数

访问Modified Closure

string [] files = new string[2];
files[0] = "ThinkFarAhead.Example.Settings.Configuration_Local.xml";
files[1] = "ThinkFarAhead.Example.Settings.Configuration_Global.xml";

//Resharper complains this is an "access to modified closure"
for (int i = 0; i < files.Length; i++ )
{
    // Resharper disable AccessToModifiedClosure
    if(Array.Exists(Assembly.GetExecutingAssembly().GetManifestResourceNames(),
    delegate(string name) { return name.Equals(files[i]); }))
         return Assembly.GetExecutingAssembly().GetManifestResourceStream(files[i]);
    // ReSharper restore AccessToModifiedClosure
}
Run Code Online (Sandbox Code Playgroud)

虽然ReSharper抱怨这是"访问修改后的闭包",但上述情况似乎工作正常.任何人都可以阐明这一点吗?

(这个主题在这里继续)

c# resharper closures

310
推荐指数
2
解决办法
8万
查看次数

什么是Lambda?

有人可以提供一个很好的描述Lambda是什么?我们有一个标签,他们是C#问题的秘密,但我还没有找到一个很好的定义和解释他们是什么.

language-agnostic lambda computer-science terminology

92
推荐指数
5
解决办法
1万
查看次数

Javascript本地和全局变量混淆

我是JavaScript的新手,我在本地和全局变量作用域上做了一些练习,以下是我的代码(小提琴):

var myname = "initial"
function c(){
    alert(myname);
    var myname = "changed";
    alert(myname);
}
c();
Run Code Online (Sandbox Code Playgroud)

当第一个警报被调用时,它显示myname为未定义.所以我的困惑是为什么我无法访问全局实例,myname如果我没有myname在函数中定义,那么它将正常工作.

javascript

80
推荐指数
2
解决办法
2万
查看次数

如何理解Javascript中的闭包?

如何理解Javascript中的闭包?

一般而言,闭包是绑定到一个或多个外部变量的函数.调用它时,该函数可以访问这些变量.在JavaScript中,当函数在另一个函数内声明时,通常会实现闭包.即使在父函数终止之后,内部函数也会访问父函数的变量

在这个语句中,"闭包是一个绑定到一个或多个外部变量的函数",这是否意味着我们可以这样做:var myFun = Function(msg){...};它是否正确?

什么意思"甚至在父功能终止后"?

javascript closures

16
推荐指数
2
解决办法
897
查看次数

更深入地了解Javascript中的闭包

我正在阅读答案的评论并看到这个评论:

[闭包]不会持久保存foo的状态,因为它创建了一个特殊的范围,包含(1)返回的函数和(2)返回时引用的所有外部变量.这个特殊范围称为闭包.

好的,到目前为止一切顺利.现在这里是我不知道的有趣部分:

一个例子......如果你在foo中定义了另一个未在return函数中引用的 var ,它将不会存在于闭包范围内.

我想这是有道理的,但除了内存使用/性能之外还有什么影响呢?

问题 - 如果范围中的所有变量都包含在闭包中,那么我可以做什么呢?我不能用当前模型做什么?

javascript closures

12
推荐指数
1
解决办法
702
查看次数

(JS)闭包是否需要函数内部的函数

我对封闭的固有概念有点困难.我得到了基本的想法,但事情就是这样:我认为,从技术上讲,每个Javascript函数中都有"闭包".引用维基百科:

在计算机科学中,闭包(也是词法闭包,函数闭包或函数值)是一个函数以及该函数的非局部名称(自由变量)的引用环境.据说这种功能是"封闭"其自由变量.

因此,既然您可以在函数内部定义变量,那么它们将"关闭"到代码的其余部分,因此我将其视为闭包.因此,据我所知:

(function(){var a = 1;}())
Run Code Online (Sandbox Code Playgroud)

是一个(不是非常有用)闭包的例子.或者哎呀,即使只是这样:

function(){var a = 1;}
Run Code Online (Sandbox Code Playgroud)

但是,我认为我的理解可能是错误的.其他人告诉我,对于一个关闭它必须坚持一个状态,所以因为没有任何东西超出该代码,它不是真正的闭包.这表明你需要:

function(foo){foo.a = 1;}(bar); // bar.a = 1
Run Code Online (Sandbox Code Playgroud)

甚至(以确保不可修改):

function(foo){var a = 1; bar.baz = function() { return a}}(bar); // bar.baz() = 1
Run Code Online (Sandbox Code Playgroud)

因此,从技术上讲(我知道几个例子实际上毫无意义,但是)上述哪些例子实际上是闭包的例子.并且闭包只需要是一个空间(即在JS函数内),其中可以存储无法从外部访问的变量,或者持久性是闭包定义的关键部分吗?

编辑

刚刚注意到Stack Overflow上"closures"标签的维基定义:

闭包是一个第一类函数,它引用(关闭)变量来自定义它的作用域.如果闭包在其定义范围结束后仍然存在,则它关闭的变量也将继续存在.

虽然SO维基当然不是最终权威,但第一句似乎与我对该术语的理解相关.第二句则意味着封闭如何被使用,但它并没有看起来像一个要求.

编辑#2

如果从这里的变化答案,维基百科答案和标签答案中不清楚,似乎没有就"封闭"这个词甚至意味着什么达成明确的共识.所以虽然我很欣赏到目前为止的所有答案,但如果你按照作者对闭包的定义来说它们都是有意义的,我猜我真正想要的是......是否有任何实际的"权威"定义(如果是这样,它如何适用于以上所有)?

javascript closures

8
推荐指数
1
解决办法
607
查看次数

JavaScript中的每个函数都是闭包是真的吗?

我知道JavaScript中的每个函数都是一个第一类对象,它有一个内部属性[[scope]],它承载函数自由变量的绑定记录.但是,有两种特殊情况.

  1. Function构造函数创建的函数也是一个闭包吗?Function构造函数创建的函数对象是特殊的,因为它的[[scope]]可能不引用其外部函数的词法环境,而只引用全局上下文.例如,

    var a = 1; 
    var fn = (function outer() {
        var a = 2; 
        var inner = new Function('alert(a); ');
        return inner;
    })();
    fn(); // will alert 1, not 2.
    
    Run Code Online (Sandbox Code Playgroud)

    这是不直观的.这也叫封闭吗?

  2. 如果内部函数没有任何自由变量,我们可以说在创建内部函数时会形成闭包吗?例如,

    // This is a useless case only for academic study
    var fn = (function outer() {
        var localVar1 = 1,
            localVar2 = 2;
        return function() {};
    })();
    
    Run Code Online (Sandbox Code Playgroud)

    在这种情况下,fn指的是作为内部函数创建的空函数对象.它没有自由变量.在这种情况下我们可以说闭合形成了吗?

javascript closures ecmascript-5

8
推荐指数
2
解决办法
1224
查看次数

Javascript Closures说明

问题: 闭包似乎有很多好处,但有什么负面影响?另外,我对闭包的理解是否正确?最后,一旦创建了闭包,它们会被销毁吗?

我一直在阅读有关Javascript Closures的一些信息.我希望有一点知识渊博的人会指导我的断言,纠正错误的地方.

闭包的好处:

  1. 使用内部函数将变量封装到本地作用域.该函数的匿名性是微不足道的.

我发现有用的是做一些关于本地/全球范围的基本测试:

<script type="text/javascript">

   var global_text  = "";
   var global_count = 0;
   var global_num1  = 10;
   var global_num2  = 20;
   var global_num3  = 30;

   function outerFunc() {

      var local_count = local_count || 0;

      alert("global_num1: " + global_num1);    // global_num1: undefined
      var global_num1  = global_num1 || 0;
      alert("global_num1: " + global_num1);    // global_num1: 0

      alert("global_num2: " + global_num2);    // global_num2: 20
      global_num2  = global_num2 || 0;         // (notice) no definition with 'var'
      alert("global_num2: " + global_num2); …
Run Code Online (Sandbox Code Playgroud)

javascript closures

6
推荐指数
0
解决办法
666
查看次数