当前位置: 移动技术网 > IT编程>开发语言>JavaScript > JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍

JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍

2018年03月24日  | 移动技术网IT编程  | 我要评论

nryana,潮流家具,x120

某天写代码突然县道这个问题,顺势总结一波

javascript 函数和变量声明的“提前”(hoist)行为

简单的说 如果我们使用 匿名函数

var a = {}

这种方式, 编译后变量声明a 会“被提前”了,但是他的赋值(也就是a)并不会被提前。

也就是,匿名函数只有在被调用时才被初始化。

如果使用

function a () {};

这种方式, 编译后函数声明和他的赋值都会被提前。

也就是说函数声明过程在整个程序执行之前的预处理就完成了,所以只要处于同一个作用域,就可以访问到,即使在定义之前调用它也可以。

看一个例子

function hereorthere() { //function statement
  return 'here';
}
console.log(hereorthere()); // alerts 'there'
function hereorthere() {
  return 'there';
}

我们会发现alert(hereorthere) 语句执行时会alert('there')!这里的行为其实非常出乎意料,主要原因是javascript 函数声明的“提前”行为,简而言之,就是javascript允许我们在变量和函数被声明之前使用它们,而第二个定义覆盖了第一种定义。换句话说,上述代码编译之后相当于

function hereorthere() { //function statement
 return 'here';
}
function hereorthere() {//申明前置了,但因为这里的申明和赋值在一起,所以一起前置
 return 'there';
}
console.log(hereorthere()); // alerts 'there'

我们期待的行为

var hereorthere = function () { // function expression
  return 'here';
};
console.log(hereorthere()); // alerts 'here'
hereorthere = function () {
  return 'there';
};

这段程序编译之后相当于:

var hereorthere;//申明前置了
hereorthere = function() { // function expression
 return 'here';
};
console.log(hereorthere()); // alerts 'here'
hereorthere = function() {
 return 'there';
};

总结

以上所述是小编给大家介绍的javascript 中定义函数用 var foo = function () {} 和 function foo()区别介绍,希望对大家有所帮助

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网