如何权衡闭包与重复获取~

function tset() {
    var dom = $(dom); 
    
    $(btn).on('click', function () {
        dom.css('height', 'auto');
    });
}
function tset() {
    $(btn).on('click', function () {
        var dom = $(dom);
        dom.css('height', 'auto');
    });
}

第一种会形成闭包 然而第二种虽然执行完会释放变量 dom 然而如果下次 btn 点击的话 又会重复去取元素(重复取元素算频繁的 DOM 操作吗?) 这两种选哪一个会好一点?还是说要根据实际需求去判断 比如如果 btn 元素用户操作会特别频繁的话选择闭包 如这个位置的交互只是偶尔的话 选择执行完释放变量 轻微的优化一下内存~

阅读 4.3k
8 个回答

我想说,第一种当然是闭包。这在一个小作用域定义了一个处理函数,通过事件绑定之后在这个小作用域外被调用(事件触发时)——所以当然是闭包。 @microkof 是否赞同?

然后,这个回答其实和 https://segmentfault.com/q/10... 也没多大区别,都是你的问题我也懒得再写一次。

同样,这点性能差完全可以忽略。一般来说,写程序怎么好懂怎么写,如果实在发现性能问题,定位到瓶颈,专门对其进行优化就好。程序首先是给人看的,其次才是给电脑运行的。如果想写直接给电脑运行的,还是直接写二进制码(比汇编还低级)性能最好。

要根据实际需求去判断

  • 当dom会动态改变时,必须重复获取dom。

  • 当dom静态不变时,优先缓存dom。

第一种的确是闭包,验证如下:

function test() {
    var i=0; 
        
    document.onclick = function () {
        console.log(++i)
    };
}
test()

重复使用的话,肯定是上面那种好些.每次取获取dom元素比较消耗性能

闭包没关系的不用纠结,肯定是重复取DOM耗性能

第一种改成匿名函数

首先明确,第一种写法不是闭包。
然后,第一种写法缓存了变量当然是更优。
再然后,你写的函数如果打算重复使用,应该把$(dom)的赋值放到函数之外。

这就是你性能优化的事情了吧,跟生命周期有关吗,我也不知道

不用在意!
抛开业务谈优化的都是耍流氓!
忘了谁说的了,就不打标签了。
一般来说,前端是不需要考虑太多性能方面的问题的。
除非你做游戏或者大数据级的平台。

推荐问题