首页 > 用js完成自适应时为什么要加两对()()啊

用js完成自适应时为什么要加两对()()啊

window.onload = function(){(
    window.onresize = function () {
        //获取可见宽度和宽度
        //documentElement是整个DOM的根节点,即html
        var width = document.documentElement.clientWidth - 180;
        var height = document.documentElement.clientHeight - 80;
        if(width >= 0){
            document.getElementById('main').style.width = width + 'px';
        }
        if(height >= 0){
            document.getElementById('main').style.height = height + 'px';
            document.getElementById('sidebar').style.height = height + 'px';
        }
})()
};

为什么要加两对 ()()才能在刚进页面时就能调用函数,不加的话必须滚动下才能调用?
这是为啥。

(function(){})()表示立即执行第一个括号里的function,对应到你的问题,就是页面加载立即执行一次window.onresize方法。
这样写还有个好处就是形成了一个函数的局部作用域,不用害怕多人协作时变量冲突了,当然全局变量还是少用为妙。


// 两对括号意思是立即执行,相当于下面的代码
function resizeFn() {
    //获取可见宽度和宽度
    //documentElement是整个DOM的根节点,即html
    var width = document.documentElement.clientWidth - 180;
    var height = document.documentElement.clientHeight - 80;
    if(width >= 0){
        document.getElementById('main').style.width = width + 'px';
    }
    if(height >= 0){
        document.getElementById('main').style.height = height + 'px';
        document.getElementById('sidebar').style.height = height + 'px';
    }
})

var FN = resizeFn();
window.onresize = FN;

reseize之前,resizeFn已经被执行过一次了。


这段代码写得太烂了,可读性非常差,他的意思是window.onload的时候,去绑定resize,而且同时还要在resize的时候绑定同样一个函数?这思维太混乱了。

你知道 window.onresize = function () {}的返回值是这个函数本身? 有可读性?
这么写好点:

var dosomething = function () {...}
window.onload = dosomething
window.resize = dosomething
【热门文章】
【热门文章】