-
李晓健
给一下两种情况下的示例代码,我觉得应该是不加的 除非这么写 window.onload=function(){ xxxxxx };
-
水秋玄
先来看一下代码:<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");
}
-
紫色往年
不加括号是方法的声明,加了括号是方法的调用;例如:var init = function(){};//声明init();//调用
-
NY24
加括号表示调用,函数立刻执行;不加括号表示函数的引用赋值,即当符合条件时才会执行;
-
zhangcl
window是浏览器类自带的对象,这个onload是window的一个属性,这个属性表现为一个function,你可以看一下js类的写法。也就是说window有一个默认的onload方法。上面的写法就是在重写onload方法,类似于java里面的匿名方法。表示页面加载完所有的文件后,执行此方法。onload本身只是一个变量,不具有任何实际的意义,所以如果要把onload定义为一个方法,那么必须写出具体的方法体:window.onload=function(){//方法体},这样才是完整的声明方式;换一种理解方式,如果onload是一个值,那么你就必须写成window.onload="abc";道理都是一样的,只看怎么理解,唯一的区别就在于js的属性对象可以定义为function。
-
qq_小鱼肉_0
加括号是匿名函数了 意思是把定义的不加括号函数,和函数调用 2段写为一段了 才产生了这样的情况
-
vincent_chao
来学习一下,等待消息
-
早安思嘉
在函数后面加一个()是属于匿名函数的一种,可用用来加载时就需要立即执行的代码~
-
慕女神
方法名后面的括号加与不加的区别很大。
-
i爱慕客
不太确定