深入理解JavaScript系列(15)函数
函数有三种类型:函数声明、函数表达式、函数构造器函数。
函数声明
函数声明缩写FD:
有一个特定的名称; 在源码中的位置:要么处于程序级,要么处于函数主体中; 进入上下文阶段创建; 影响变量对象;
function foo () {
};
注:不可能在表达式位置或一个代码块中定义。
函数表达式
函数表达式缩写FE:
远吗必须出现在表达式位置; 有可选的名称; 不会影响变量对象; 在代码执行阶段创建;
var foo = function () {
};
上述代码是让一个匿名函数表达式赋值给变量foo,可以通过foo这个名称进行访问。
var foo = function _foo () {
};
上述函数使用可选的名称foo;函数外部通过foo访问,内部使用foo访问。
函数表达式不能以大括号和函数关键字(function)开始。以下为错误:
function foo () {}();
function foo (){}为表达式,不能被调用。但是表达式加一个分组操作符则正确。下面代码最后的(1)则为分组操作符。
function foo (){}(1);
逗号、或与非都会使函数声明变为表达式:
1,function () {
}
!function () {
}
函数表达式不影响变量,比如:
var foo = _foo (){}; //_foo这个变量全局则访问不到
通过函数构造器创建的函数
构造函数的[[scope]]仅包含全局对象
var x = 10;
funtion foo () {
var x = 20, y = 30;
var bar = new Function ('console.log(x, y)');
bar(); // 10, y未定义
}
Function构造器 可以使用new,也可以不使用。
Written on July 5, 2015