首页 > 代码库 > 以前忽略了的 函数定义表达式【提升】 的小细节
以前忽略了的 函数定义表达式【提升】 的小细节
区别函数定义的两种方式:
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(),虽然写在前面,但是并没有执行。真正的执行,在最后。而在那个时候,代码已经完成了定义,所以不会报错。
不过最好的写法是使用函数声明语句
以前忽略了的 函数定义表达式【提升】 的小细节
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。