为了账号安全,请及时绑定邮箱和手机立即绑定

window.onload=方法名();方法名后面的括号加与不加的区别?

window.onload=方法名();方法名后面的括号加与不加的区别?

慕数据9668469 2016-01-18 11:25:06
有时候加就可以,有时候加就不可以。为什么?
查看完整描述

13 回答

?
李晓健

TA贡献1036条经验 获得超461个赞

给一下两种情况下的示例代码,我觉得应该是不加的  除非这么写 window.onload=function(){ xxxxxx };


查看完整回答
5 反对 回复 2016-01-18
?
水秋玄

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");
}


查看完整回答
4 反对 回复 2017-10-19
已采纳
?
紫色往年

TA贡献5条经验 获得超4个赞

不加括号是方法的声明,加了括号是方法的调用;

例如:

var  init = function(){

};//声明

init();//调用

查看完整回答
1 反对 回复 2016-01-19
?
NY24

TA贡献1条经验 获得超1个赞

加括号表示调用,函数立刻执行;

不加括号表示函数的引用赋值,即当符合条件时才会执行;

查看完整回答
1 反对 回复 2017-04-17
?
zhangcl

TA贡献12条经验 获得超7个赞

window是浏览器类自带的对象,这个onload是window的一个属性,这个属性表现为一个function,你可以看一下js类的写法。也就是说window有一个默认的onload方法。上面的写法就是在重写onload方法,类似于java里面的匿名方法。表示页面加载完所有的文件后,执行此方法。onload本身只是一个变量,不具有任何实际的意义,所以如果要把onload定义为一个方法,那么必须写出具体的方法体:window.onload=function(){//方法体},这样才是完整的声明方式;换一种理解方式,如果onload是一个值,那么你就必须写成window.onload="abc";道理都是一样的,只看怎么理解,唯一的区别就在于js的属性对象可以定义为function。

查看完整回答
反对 回复 2016-01-22
?
qq_小鱼肉_0

TA贡献5条经验 获得超0个赞

加括号是匿名函数了  意思是把定义的不加括号函数,和函数调用 2段写为一段了 才产生了这样的情况

查看完整回答
反对 回复 2016-01-19
?
vincent_chao

TA贡献3条经验 获得超1个赞

来学习一下,等待消息

查看完整回答
1 反对 回复 2016-01-18
?
早安思嘉

TA贡献3条经验 获得超0个赞

在函数后面加一个()是属于匿名函数的一种,可用用来加载时就需要立即执行的代码~

查看完整回答
反对 回复 2016-01-18
?
慕女神

TA贡献33条经验 获得超365个赞

方法名后面的括号加与不加的区别很大。


查看完整回答
反对 回复 2016-01-18
?
i爱慕客

TA贡献41条经验 获得超61个赞

不太确定

查看完整回答
反对 回复 2016-01-18
?
Lyong

TA贡献23条经验 获得超16个赞


function myFun(){
    return 1;
}
var x = myFun; //赋值操作,x是myFun函数
var y = myFun();//执行操作,y是myFun函数的执行结果 5


查看完整回答
反对 回复 2016-01-18
  • 慕粉18221508921
    慕粉18221508921
    意思就是,x后面就是myFun函数咯,直接可以调用?y是myFun函数的执行结果了;
  • 13 回答
  • 0 关注
  • 6582 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信