问答详情
源自:9-18 浏览器窗口可视区域大小

@WingMeng的问题“想增加一个功能:窗口改变时重新获取窗口大小”引申出来的疑惑。

<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<script type="text/javascript">
function Size(){
    var Wt = document.documentElement.clientWidth || document.body.clientWeight;
    var Ht = document.documentElement.clientHeight || document.body.clientHeight;
    document.innerHTML="浏览器当前窗口大小为:" + Wt +"px&times;" + Ht + "px";
}
Size(); 
// 当前窗口调整尺寸时重新获取尺寸
window.onresize = function(){
    Size();
}
</script>
</body>
</html>

我有一个知识点不太懂,15行的代码

window.onresize = function(){
    Size();
}

为什么要加上function(){} ?

Size()不已经是一个函数了吗?

试了一下去掉function()后Size()只能运行一次,请问这是为什么?

具体的知识点在哪里讲过还请大神明示,我好具体的看看。THX~

提问者:Groune 2015-04-11 15:57

个回答

  • Groune
    2015-07-12 19:11:49

    <!DOCTYPE HTML>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <script type="text/javascript">
    
    // 当前窗口调整尺寸时重新获取尺寸
    window.onresize = Size;
    
    function Size()
    {
        var Wt = document.documentElement.clientWidth || document.body.clientWeight;
        var Ht = document.documentElement.clientHeight || document.body.clientHeight;
        document.body.innerHTML = "浏览器当前窗口大小为:" + Wt +"px&times;" + Ht + "px";
    }
    
    </script>
    </head>
    <body>
    </body>
    </html>

    一下详细解答来自百度知道->@司马唐迁。


    js是事件驱动的,一个节点可以发生很多种事件,包括click事件。在js中,当节点发生某一个事件时,可以为该事件绑定一个处理函数。也就是类似的

    document.getElementById("myBtn").onclick = function(){}

    所要注意的是,这个节点的onclick属性,需要赋给一个函数类型的值,才可以处理事件。

    但是displayDate()并不是一个函数,你可以说你定义了displayDate函数,但displayDate()也就是加了一对括号的displayDate,是函数执行了,displayDate()是等价于displayDate的返回值的。在displayDate函数里,只是给id为demo的节点重新设置了内容,没有返回值,所以默认的就是undefined。

    那么如果写成

    document.getElementById("myBtn").onclick = displayDate();

    实际上是等价于

    document.getElementById("myBtn").onclick = undefined;

    显然undefined是不能作为节点事件的处理函数的。

    但是,也不是一定要加上function(){},你可以写成这样:

    document.getElementById("myBtn").onclick = displayDate;

    虽然displayDate()不是函数,但displayDate却是函数,是可以作为节点事件的处理函数的。


  • Danmomo
    2015-07-09 12:57:04

    function Size(){
        var Wt = document.documentElement.clientWidth || document.body.clientWeight;
        var Ht = document.documentElement.clientHeight || document.body.clientHeight;
        document.innerHTML="浏览器当前窗口大小为:" + Wt +"px&times;" + Ht + "px";
    }
    Size();

    这里执行了一次Size();所以如果是这样的话

    window.onresize = Size();

    无论窗口改不改变,Size()的值都直接赋值给window.onresize

    因此要这样

    window.onresize = function(){
        Size();
    }

    当窗口发生改变的时候,才再一次执行Size();让改变后的窗口值赋给window.onresize();

    我的理解就是这样,不对别喷,大家来探讨