内部闭包函数语句不执行

时间:2016-07-28 14:01:40

标签: javascript closures

关于闭包功能,我有一个小问题。我有以下闭包功能:

if NSURL(string: urlString) != nil {
   //Object is created successfully.Now you can do whatever you want this object.
}
else {
   //It failed to create an object.
}

这是一个自调用函数,所以第一次执行每个语句,但是当我在闭包语句中调用var add = (function() { var counter = 0; console.log('Executed'); return function() { return counter += 1; }; })(); add();方法时,除了add()语句之外没有执行。

1 个答案:

答案 0 :(得分:0)

运行代码段后,请查看日志。



console.log('Before first execution.');
var add = (function() {
  console.log('Inside First time execution');
  var counter = 0;
  console.log('Executed');
  console.log('Returning a Funciton.');
  // Inner Function.
  return function() {
    console.log('Inner function called.')
    return counter += 1;
  }
})();
console.log('End of first execution');
console.log('Start of second execution');
add();
console.log('End of second execution');




add()是一个自动调用函数,可立即获取。现在在调用时会返回一个函数。现在技巧是这个新返回的函数(假设inner函数)被分配回变量add。所以现在这个add转而指向/引用这个inner函数。

在第二次执行中,因此当你调用add()时,它一直指向被调用的内部函数。