匿名函数
函数定义的两种方式:
1.函数声明,使用var声明 var a = function() {};
等号右边可以是匿名函数,也可以是具名函数,但是都不能立即执行,必须通过变量a实例化一个 对象才可以调用:
//匿名函数
var a = function (){
alert(1);
}
var b = new a(); //返回1
//具名函数
var d = function e(){
alert(2);
}
//直接调用e();会报错
2.函数表达式;
function aa(age){
this.age = age;
this.foo = function() {
alert(1);
}
}
//要调用.foo()的方法或者查找属性age,必须new实例化一个对象,直接在函数aa中不能调用或查找
var a = new aa(12);
a.foo(); //alert(1);
a.age; //12
关于立即调用的函数表达式(LIFE),又叫自执行的函数表达式的方法:
(function() {})();
(function(){}());
[function(){}()];
~function(){}();
!function(){}();
-function(){}();
+function(){}();
delete function() {}();
typeof function() {}();
void function() {}();
new function() {}();
new function() {};
var f = function() {}();
1, function() {}();
1 ^ function() {}();
1 > function() {}();
//一元运算符,他们的作用是告诉js解析器附近的匿名函数是一个表达式
3.函数必须要有函数名,即使是聪明如我的匿名函数也必须要使用var来声明,一个没有函数名的函数要么是一个方法,要么就是自执行函数,若一个匿名函数既不是方法,又不是立即调用函数,就会报错啦!
4.关于一些错误的处理:
(1).function(){}();
看来是想要立即调用一个匿名函数表达式,但是实际上是声明了一个函数,但是函数声明必须要有标识符作为函数的名称;
var a =function(){}();
(2)function f(){}();
计划是立即调用一个具名函数表达式,但是实际上是声明了一个函数名为f的函数,末尾()作为分组运算符,必须要提供表达式作为参数;