【NodeJS开发日记(6)】——Js函数直接调用的方法

【转自https://www.jb51.net/article/33304.htm】

1.前言 

函数需要先定义,后使用。 这基本上所有编程语言的一条铁的定律。 
一般状况下, 我们需要调用一个JavaScript 函数, 基本的状况都是先定义, 然后再调用。 看一个例子 
复制代码代码如下:

<!--by oscar999 2013-1-16--> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Say Hello</title> 
</head> 
<body> 
<script> 
//define function 
function sayHello() 

alert("hello"); 

//call function 
sayHello(); 
</script> 
</body> 
</html> 

但是如果不需要显示调用函数, 让这个函数在定义的时候就执行的话, 该如何写才可以呢? 
2.思考的历程  
从以上的例子来看,聪明的你结合以上的使用状况可能会想: 
===》既然调用的时候是在函数名后面加上一对 是否在function 定义的后面加上一对大括号是否就可以执行了呢? 像以下这样: 
复制代码代码如下:

function sayHello() 

alert("hello"); 
}(); 

不幸的是,以上的写法会报出js 的语法错误。 
因为Javascript 的解析器在解析器解析全局的function或者function内部function关键字的时候, 默认会把大括号解析成function声明,而不是function表达式。

也就是说, 会把最后的一对大括号默认解析成一个缺少名字的function,并且抛出一个语法错误信息,因为function声明需要一个名字。

===》 你可能又会想, 如果我在大括号中传入参数是否就会解析成表达式了呢? 
复制代码代码如下:

function sayHello() 

alert("hello"); 
}(1); 

的确, 错误是没有了。 但是以上的写法等同于以下写法的效果 
复制代码代码如下:

function sayHello() 

alert("hello"); 
}; 
(1); 

这两句完全没有关系, 函数还是不会执行 
3.正确的写法  
对于JavaScript 来说,括弧()里面不能包含语句,所以在这一点上,解析器在解析function关键字的时候,会将相应的代码解析成function表达式,而不是function声明所以,只要将大括号将代码(包括函数部分和在后面加上一对大括号)全部括起来就可以了。 
复制代码代码如下:

(function sayHello() 

alert("hello"); 
}()); 

还有一种写法也可以, 就是将后面的大括号移出来, as 
复制代码代码如下:

(function sayHello() 

alert("hello"); 
})(); 

推荐是使用第一种方式。 
但是目前很多比较好的js library 使用的都是第二种方式。 
比如: web 图形绘制的: git , draw2d ,....
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值