function method(){}与var method = function(){}的区别

来源:互联网 发布:淘宝有货到付款的产品 编辑:程序博客网 时间:2024/06/10 09:44

简单的代码:

1

2

3

4

5

6

7

8

9

10

11

12

function say(){

    method01();//method01

    method02();//error

    function method01(){

        alert('method01');

    }

    var method02 = function(){

        alert('method02');

    }

}

 

say();

为什么调用方法method01能正常运行,而调用方法method02却会报错呢?

  首先,你要明确的知道method01为一个函数对象,而method02为一个变量,它指向于另一个函数对象。根据上一节的内容,在'活动对象'完成的'变量实例化'(Variable Instatiation)的过程中,对函数method01进行了正常的'预解析',而对于变量method02解析为undefined值,当进入到执行代码的环节时,因为method02的调用在其计算函数表达式之前,因此将undefined当作方法调来用,必然会报错。解决方案比较简单,就是将var method02=function(){...}放到其method02()的调用之前就可以了或者是用函数声明的方式定义函数(function method(){...})。

注:计算函数表达式就是指程序执行到var method02 = function(){...}。method02此时真正指向一个函数对象。因为在'预解析'时,method02只被赋于了undefined.

0 0