【问题标题】:Is it a closure?是闭包吗?
【发布时间】:2015-12-07 20:18:13
【问题描述】:

您好,我几天前开始关闭,我想知道我是否走在正确的道路上。我也在这里阅读了很多东西,但我觉得我需要我自己的例子。所以这是我的例子:

var test = {
 app: function() {
 var a = "asdasd0";
 function f() {
  document.write(a);
 }
 test.change();
 return f();
},
change: function() {
 $("body").css({
  "color": "red"
 });
 }
}
test.app();

当我认为函数 f(){...}; 时我是对的吗? test.app 内部是一个闭包,而 test.app 中的 test.change() 也是一个闭包?还有什么吗?

为什么 test.change() 在 codepen(文本为红色)和 jsfiddle(文本不是红色)中的工作方式不同?是不是代码不好,jsfiddle有问题?

【问题讨论】:

标签: javascript jquery closures


【解决方案1】:

就定义“test”的外部上下文而言,这两个函数都是闭包,但是,从技术上讲,“change”内部没有闭包,因为没有本地定义的变量或函数。在“app”中,您有适当的闭包,其中“a”可用于“f”,并且该函数仅对“app”是私有的。

另外,它在 Codepen 和 JSFiddle 上工作不一样的原因是因为你想包装这个代码,然后文档完成加载,我认为 JSFiddle 在“加载”触发之前执行你的代码。

window.addEventListener('load', function init () {
  // Do your stuff here and see if it works in both.
});

【讨论】:

    猜你喜欢
    • 2010-10-07
    • 2019-11-29
    • 2014-10-21
    • 2013-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多