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

JavaScript学习笔记(十) 函数声明VS函数表达式

2012-09-26 21:57 726 查看
我们应该在什么时候使用函数声明或函数表达式呢?

当你在语法上不能使用函数声明的时候,你就可以使用函数表达式;

比如:传递一个函数作为参数或者在对象字面量中定义一个函数:

// this is a function expression,
// pased as an argument to the function `callMe`
callMe(function () {
// I am an unnamed function expression
// also known as an anonymous function
});
// this is a named function expression
callMe(function me() {
// I am a named function expression
// and my name is "me"
});
// another function expression
var myobject = {
say: function () {
// I am a function expression
}
};
函数声明只能出现在“程序代码”中,意味着只能在其它函数体中或者全局空间;

它们的定义不能不能赋值给一个变量或属性,或者作为一个参数传递出现在函数调用中;

下面的例子是函数声明的允许的用法,foo(),bar()和local()都是通过函数声明模式声明:

// global scope
function foo() {}
function local() {
// local scope
function bar() {}
return bar;
}


像下面这段代码就会报错:

function DeclarationsVSExpression() {
//f1(); //f1 is undefined
var i=0;
var f2 = function f1() {
console.info("XXXX");
while(i<10){
i++;
f1();
}

};
console.info(f2.name); //output f1
f2();
//f1();//f1 is undefined
}


说明命名函数表达式的名字(f1,可选的)是被忽略的,不能通过函数表达式的名字名字(f1)调用函数,只有变量名是有效的,但是函数表达式的名字名字会作为函数的name属性;

但在函数内部是可以通过函数表达式的名字(f1)调用的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: