是关闭吗?

时间:2015-12-07 20:18:14

标签: javascript jquery closures

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

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.change()也在test.app中是一个闭包?还有什么吗?

另外为什么test.change()在codepen(文本为红色)和jsfiddle(文本不是红色)中的工作方式不同?这是一个糟糕的代码,jsfiddle有问题吗?

1 个答案:

答案 0 :(得分:0)

两个函数都是根据定义“test”的外部上下文的闭包,但是,从技术上讲,“change”中没有闭包,因为没有本地定义的变量或函数。在“app”中你有适当的闭包,“a”可用于“f”,而该功能仅对“app”是私有的。

此外,它在Codepen和JSFiddle上的工作方式不同的原因是因为你想要包装这段代码然后文档加载完毕,我认为JSFiddle会在“load”出现之前执行你的代码。

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