$('.dom').on('click', function () {
function test() {
console.log('abc');
}
});
函数 test 在每次点击的时候被声明 然后 click 回调执行完被 GC 如果 dom 不止被一次点击 那么每次的点击回调都多了一步函数声明 我记得在 jshint 的规范里都不允许函数声明写到循环里 现在的情况不是类似吗?那么如何处理才是最完美的 我应该把 test 函数声明位置提到外部吗 那么这样又会造成闭包 导致 test 函数无法被回收的 如果用户只用到一次这块逻辑的话 显然是亏的 到底该如何权衡?~
过去多啦不再A梦2017-05-19 10:25:40
循环里跟函数里是不一样的。
循环里并不是一个独立的作用域,所以在里面声明函数会声明提前,函数里则不会。jshint防止的是重复定义。
function a() {
function b() {
}
}
b只有在a函数执行的才会被声明,并且如果没有任何外部引用指向b,则在函数执行完下一轮回收后被销毁。
实际上差别不大。
世界只因有你2017-05-19 10:25:40
function test(message) {
console.log(message);
}
$('.dom').on('click', function () {
test('abc')
});
test 用完就丢了,并不会无法回收。
为情所困2017-05-19 10:25:40
如果只执行一次的话, 可以这样:
var elem = $('.dom');
elem.on('click', (function() {
return function foo(e) {
// do something...
elem.off('click', foo);
};
}()));
定义的foo不会影响外面, 用完立即卸载等待回收.
干干净净, 深藏功与名