以前忽略了的 函数定义表达式提升 的小细节
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以前忽略了的 函数定义表达式提升 的小细节相关的知识,希望对你有一定的参考价值。
区别函数定义的两种方式:
var foo = function() {} //函数定义表达式 function foo() {} //函数声明语句
前者有提升现象,后者没有。
众所周知,javascript在中有 “变量提升”的现象——在变量声明之前使用该变量就会报错;原因是因为js 是从上到下执行,在使用一个还未定义的变量所以就会报错!
同理:
foo()
var foo = function(){ console.log(1) }
=> VM3022:1 Uncaught TypeError: foo is not a function
at <anonymous>:1:1
上述中的函数表达式,函数名是一个变量名,变量指向函数对象。和通过var声明变量一样,也会造成提升。foo()还未定义所以报错;
新发现:
function foo1() {foo()} var foo = function(){ console.log(1) } foo1() //输出: 1
造成提升的真正原因是: javascript是从上到下执行的,由于执行到未定义的变量时就会报错,然而这里的 foo(),虽然写在前面,但是并没有执行。真正的执行,在最后。而在那个时候,代码已经完成了定义,所以不会报错。
不过最好的写法是使用函数声明语句
以上是关于以前忽略了的 函数定义表达式提升 的小细节的主要内容,如果未能解决你的问题,请参考以下文章