函数的第二个重要特性是它能提供作用域支持
// 具名函数表达式
var add = function add(a, b) {
return a + b;
};
// 匿名函数表达式,又称匿名函数
var add = function (a, b) {
return a + b;
};
当省略第二个add,它就成了没有名字的函数表达式,这不会对函数定义和调用语法造成任何影响。带名字和不带名字唯一的区别是函数对象的name属性是否为空字符串。
函数的name属性
function foo() {} // 函数声明
var bar = function () {}; // 匿名函数表达式
var baz = function baz() {}; // 具名函数表达式
foo.name; // "foo"
bar.name; // ""
baz.name; // "baz"
//回调模式
函数是对象,也就意味着函数可以当作参数传入另外一个函数中。给函数writeCode()传入一个函数参数introduceBugs(),在某个时刻writeCode()执行了(或调用了)introduceBugs(),在这种情况下,我们称introduceBugs()是一个“回调函数”,简称“回调”:
function writeCode(callback) {
// 做点什么……
callback();
// ……
}
function introduceBugs() {
// ……
}
writeCode(introduceBugs);
//对象即时初始化
还有另外一种可以避免污染全局作用域的方法,和前面描述的即时函数相似,叫做“对象即时初始化”模式。这种模式使用一个带有init()方法的对象来实现,这个方法在对象被创建后立即执行。初始化的工作由init()函数来完成。
({
// 这里可以定义一些设置项,比如常量
maxwidth: 600,
maxheight: 400,
// 你也可以定义一些方法
gimmeMax: function () {
return this.maxwidth + "x" + this.maxheight;
},
// 初始化
init: function () {
console.log(this.gimmeMax());
// 更多的初始化任务……
}
}).init();
//

本文深入探讨JavaScript中的函数特性,包括函数表达式的不同形式及其name属性的特性,通过实例讲解回调函数的应用,最后介绍了一种避免全局作用域污染的方法——对象即时初始化模式。

被折叠的 条评论
为什么被折叠?



