您的位置:首页 > Web前端 > JavaScript

JS中自动执行函数小结

2010-02-11 10:07 309 查看
JS中自动执行函数小结

请看以下两个函数:

1.function a(){
2.
alert("a")
3.}

1.var b= function(){
2.
alert("b")
3.}
它们俩有何不同呢?翻开书,作者会告诉我们,前者为函数声明,后者为函数表达式。函数声明作为一种声明,当然会在预编译阶级有所动作(声明提前),而函数表达式则不会。另一个区别是,函数声明是语句,语句是没有返回值,不能直接加一对括号让它们执行。

1.function a (){
2.
alert("a")
3.}();//报错

1.var b = function(){
2.
alert("b")
3.}();
给 function 外套一对括号就不报错了,括号是表达式,是表达式就有返回值,所以可以在后面加一对括号让它们执行,再看

1.(function a (){
2.
alert("a")
3.})();//没有问题
(function a (){
alert("a")
})();//没有问题

运行代码

另外,我们知道,函数名的作用就是用来引用的,现在没用了,我们是不是可以把它去掉呢?

1.(function (){
2.
alert(arguments.callee)
3.})();//弹出自身
(function (){
alert(arguments.callee)
})();//弹出自身

运行代码

知道这个,我们就可以方便地递归自身了。如弄一个深拷贝函数

01.var deepExtend = function(destination, source) {
02.
for (var property in source) {
03.
if (source[property] && source[property].constructor &&
04.
source[property].constructor === Object) {
05.
destination[property] = destination[property] || {};
06.
arguments.callee(destination[property], source[property]);
07.
} else {
08.
destination[property] = source[property];
09.
}
10.
}
11.
return destination;
12.};
另外,从另一方便也启法了我们如何兼价地批量生产各种各样的自动执行函数。因为把函数转换为表达式的方法并一定要靠括号这个操作符,我们还可以用void操作符,~操作符,!操作符……

1.void function(){
2.
alert("飞鸽传书");
3.}()

1.0, function(){
2.
alert("飞鸽传书");
3.}();1.-function(){
2.
alert("飞鸽传书");
3.}();1.+function(){
2.
alert("飞鸽传书");
3.}();1.!function(){
2.
alert("飞鸽传书");
3.}();1.~function(){
2.
alert("飞鸽传书");
3.}();1.typeof function(){
2.
alert("飞鸽传书");
3.}();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: