function foo(){}与var foo =functi

2017-09-16  本文已影响0人  __马帅傅__

function foo(){} 在进入函数执行上下文开始执行代码的时候,foo已经是一个function了。

var foo =  function(){}中,foo在进入函数执行上下文开始执行代码的时候,foo是undefined,直到执行完var foo =  function(){}这句,foo才会得到赋值。

最关键的区别在于JavaScript函数与变量的“提前”行为。

声明提升:

变量的声明提升:把变量的声明提升到当前作用域的最前面;

函数的声明提升:把函数的声明提升到当前作用域的最前面,位于前置的变量声明后面。

JS解析器:

1.找一些东西: var ,function,参数

2.逐行解读代码:

表达式: = + - * / % ++ -- ! 参数 ……(表达式可以修改解析的值)。

function hereOrThere(){ return 'here'; }

alert(hereOrThere()); // 'There'

function hereOrThere(){ return 'there'; }

由于函数的声明提升,以上代码编译后相当于:

function hereOrThere(){ return 'here'; }

function hereOrThere(){ return 'there'; }   

alert(hereOrThere()); // 'There'


声明前置了,但因为这里的声明和赋值在一起,所以一起前置,如下所示:

var hereOrThere = function(){ return 'here'; } 

alert(hereOrThere()); // 'here'

hereOrThere = function(){ return 'there'; }

以上代码编译后相当于:

var hereOrThere;  //声明前置了

hereOrThere = function(){ return 'here'; }

alert(hereOrThere()); // 'here'

hereOrThere = function(){ return 'there'; }

上一篇下一篇

猜你喜欢

热点阅读