码迷,mamicode.com
首页 > 其他好文 > 详细

以前忽略了的 函数定义表达式【提升】 的小细节

时间:2017-06-26 23:52:34      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:定义   细节   变量   也会   func   logs   函数表达式   通过   error:   

区别函数定义的两种方式:

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(),虽然写在前面,但是并没有执行。真正的执行,在最后。而在那个时候,代码已经完成了定义,所以不会报错。

 

不过最好的写法是使用函数声明语句

 

以前忽略了的 函数定义表达式【提升】 的小细节

标签:定义   细节   变量   也会   func   logs   函数表达式   通过   error:   

原文地址:http://www.cnblogs.com/ly0612/p/7082741.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!