1、// 函数表达式可以包含名称,这在递归时很有用
var f = function face(x) {
if(x <= 1){
return 1;
}else{
return x*fact(x-1);
}
}
2、// 在f()调用结束之后继续调用返回值中的方法m()
f().m();
3、var o = {
m: function(){
var self = this;
console.log(this === o); // true:这个对象就是o
f();
function f(){
console.log(this === o); // false: this的值是全局对象或undefined
console.log(self === o); // true: self指向外部函数的this值
}
}
}
4、函数表达式中的函数名是一个变量名,变量指向函数对象,和var声明的变量一样,函数表达式的函数被‘提前’到了脚本或函数的顶部;函数声明语句所声明的函数会将函数名称和函数体都‘提前’。
5、new 0.m() // this不指向0,而是指向new出来的这个新对象。
6、callee和caller的区别:
callee: 指代当前正在执行的函数
caller: 指代当前正在执行的函数的函数
例:var fact = function(x){
if(x=1) return 1;
return x*arguments.callee(x-1);
}
7、(function(){}()) // 这里function左边的括号是必不可少的,如果不写,js解释器会试图将关键字function解析为函数声明语句,使用括号js解释器才会正确地将其解析为函数定义表达式。