关于闭包功能,我有一个小问题。我有以下闭包功能:
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()
语句之外没有执行。
答案 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()
时,它一直指向被调用的内部函数。