var foo = function ... 和 function foo()... 之间的区别是:
- 语法形式:var foo = function ... 是使用变量声明的方式来定义一个函数表达式,而 function foo()... 是使用函数声明的方式来定义一个函数。
- 变量提升:使用函数声明方式定义的函数会在代码执行之前进行变量提升,可以在函数声明之前调用该函数。而函数表达式定义的函数则不会进行变量提升,只能在定义之后才能调用。
- 函数名称:函数声明方式定义的函数会自动获得一个函数名称,可以在函数内部和外部使用该名称来调用函数。而函数表达式定义的函数可以选择性地给函数赋予一个名称,该名称只能在函数内部使用。
- 函数作用域:函数声明方式定义的函数的作用域是整个代码块,可以在函数内部和外部访问函数。而函数表达式定义的函数的作用域是定义所在的代码块,只能在函数内部访问函数。
- 匿名函数:函数表达式可以是匿名函数,即没有函数名称的函数表达式。而函数声明方式定义的函数必须有函数名称。
- 函数表达式的灵活性:函数表达式可以根据需要在任何地方定义和调用,可以作为参数传递给其他函数,也可以作为其他函数的返回值。而函数声明方式定义的函数只能在全局作用域或函数作用域中定义和调用。
总结:var foo = function ... 和 function foo()... 之间的区别在于语法形式、变量提升、函数名称、函数作用域、匿名函数和灵活性等方面的差异。具体使用哪种方式取决于代码的需求和设计。