在定义函数时,我们一般使用下面这两种方法:
用函数声明创建的函数:
- function a() {
- }
用函数表达式创建的函数:
- var b = function() {
- }
当我们执行 :
- console.log(a); //输出 function a() { }
- console.log(a.name); //输出 a ----函数名
- function a() {
- }
当我们执行:
- console.log(b); //输出
- var b = function() {
- }
出现此现象的原因是,在脚本刚开始运行时,由函数声明创建的函数会进行初始化优先读取,将关键字 function
后面的字符串,即函数名 保存在该函数的 name 属性中;而此时由函数表达式创建的函数并未进行这一过程,它所以
name 属性为空。对于函数声明,js解析器会优先读取,确保在所有代码执行之前声明已经被解析,而函数表达式,如同
定义其它基本类型的变量一样,只在执行到某一句时也会对其进行解析。