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