13 回答
TA贡献6条经验 获得超6个赞
先来看一下代码:
<body onload="hello();"> <script type="text/javascript"> function hello(){ alert("Hello"); } </script> </body>
body里面的onload="hello()",此时如果你不加括号,它就变成一个字符串,没有意义。实际上写在html标签里的js代码是一种伪协议,可以写成这样<body onload="javascript:hello();">,只不过是省略写法而已,通过识别后面的括号来调用函数才能执行。
比如:
<body onload="(function(){alert(123)})()"><!--这样可以执行,其中括号的方式表示立即执行此匿名函数--> <body onload="function(){alert(123)}"><!--这样不可以执行,因为后面没有括号,它只是一个字符串-->
以上是行内代码调用函数为什么要加括号的原因。
下面再看一段代码:
function hello(){ alert("Hello"); } window.onload = hello;
这里的window.onload调用函数是不用加括号的,加了括号可以成功的原因是因为通常我们把JS代码都放到了最后面,页面也已经加载完了,或者没有涉及到页面对象的操作情况,所以才没有报错。
可以看看这个错误的例子:
<script type="text/javascript"> function hello(){ var a = document.getElementById("text"); a.innerHTML = "Hello"; } window.onload = hello();//这种情况就会报错了,因为JS是先执行后才加载下面的文档内容。你把DIV放到JS代码块前就不会报错。 </script> <div id="text"></div>
为什么会这样呢,因为window.onload = hello()这种赋值的语句的从右到左,也就是先执行了hello(),然后把hello函数执行结果(如果右return的话)赋值给window.onload,跟你直接写hello()没什么区别。所以严格来说window.onload要调用的函数是不能加括号的,避免错误。
window.onload是一个事件,它表示在页面加载完后执行它指向的代码,所以不需要给函数加括号去调用,页面加载完会自动去调用。
function hello(){ alert("Hello"); } window.onload = hello; //上面的代码完全等价于下面的代码 window.onload = function hello(){//但是这样写的话就没必要给函数命名,因为其他地方没有调用到 alert("Hello"); }
TA贡献12条经验 获得超7个赞
window是浏览器类自带的对象,这个onload是window的一个属性,这个属性表现为一个function,你可以看一下js类的写法。也就是说window有一个默认的onload方法。上面的写法就是在重写onload方法,类似于java里面的匿名方法。表示页面加载完所有的文件后,执行此方法。onload本身只是一个变量,不具有任何实际的意义,所以如果要把onload定义为一个方法,那么必须写出具体的方法体:window.onload=function(){//方法体},这样才是完整的声明方式;换一种理解方式,如果onload是一个值,那么你就必须写成window.onload="abc";道理都是一样的,只看怎么理解,唯一的区别就在于js的属性对象可以定义为function。
TA贡献23条经验 获得超16个赞
function myFun(){ return 1; } var x = myFun; //赋值操作,x是myFun函数 var y = myFun();//执行操作,y是myFun函数的执行结果 5
添加回答
举报