javascript - 是否应该避免在函数内声明函数(故意闭包除外)?
迷茫
迷茫 2017-05-19 10:23:40
0
3
579
$('.dom').on('click', function () {
    function test() {
        console.log('abc');
    } 
});

函数 test 在每次点击的时候被声明 然后 click 回调执行完被 GC 如果 dom 不止被一次点击 那么每次的点击回调都多了一步函数声明 我记得在 jshint 的规范里都不允许函数声明写到循环里 现在的情况不是类似吗?那么如何处理才是最完美的 我应该把 test 函数声明位置提到外部吗 那么这样又会造成闭包 导致 test 函数无法被回收的 如果用户只用到一次这块逻辑的话 显然是亏的 到底该如何权衡?~

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(3)
过去多啦不再A梦

循环里跟函数里是不一样的。

循环里并不是一个独立的作用域,所以在里面声明函数会声明提前,函数里则不会。jshint防止的是重复定义。

function a() {
    function b() {
    }
}

b只有在a函数执行的才会被声明,并且如果没有任何外部引用指向b,则在函数执行完下一轮回收后被销毁。

实际上差别不大。

世界只因有你
function test(message) {
  console.log(message);
}

$('.dom').on('click', function () {
  test('abc')
});

test 用完就丢了,并不会无法回收。

为情所困

如果只执行一次的话, 可以这样:

var elem = $('.dom'); 
elem.on('click', (function() {
    return function foo(e) {
        // do something...
        elem.off('click', foo);
    };
}()));

定义的foo不会影响外面, 用完立即卸载等待回收.
干干净净, 深藏功与名

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板