JavaScript引擎将函数名视同变量名,采用function命令声明函数时,整个函数会被提升到代码头部。
var sum = add(1, 2);
console.log(sum);
function add(x, y) {
return x + y;
}
以上代码由于“变量提升”,函数f被提升到了代码头部,在调用之前就已经声明了。采用赋值语句定义函数就会报错。
如果同时采用function命令和赋值语句声明同一个函数,最后总是采用赋值语句的定义。
name属性:返回紧跟在function关键字之后的那个函数名。
function fn1() {}
console.log(fn1.name);
var fn2 = function() {};
console.log(fn2.name);
var fn3 = function fn3() {};
console.log(fn3.name);
length属性:返回函数定义中参数的个数。
function fn(x, y) {}
console.log(fn.length);
函数作用域
作用域指的是变量存在的范围。一种是全局作用域,变量在整个程序中一直存在;另一种是函数作用域,变量只在函数内部存在。
(1) 在函数外部声明的变量就是全局变量(global variable),它可以在函数内部读取。
(2) 在函数内部定义的变量,外部无法读取,称为“局部变量”(local variable)。
(3) 函数内部定义的变量,会在该作用域内覆盖同名全局变量。
函数内部的变量提升
与全局作用域一样,函数作用域内部也会产生“变量提升”现象。var命令声明的变量,不管在什么位置,变量声明都会被提升到函数体的头部。
函数本身的作用域
函数本身也是一个值,也有自己的作用域。它的作用域绑定其声明时所在的作用域。