JavaScript函数的正确格式化方式

9

快速回答:

格式化JavaScript函数的正确方式是什么?

我认为应该像这样:

function doThis(){
}

并且像这样:
doThis = function(){
}

也许这没有什么区别。请告诉我哪个更好,或者它们各自有不同的原因或目的。
祝福
C
3个回答

12

它们是两个不同的东西,尽管它们都会创建一个函数(并将其赋值给一个变量)。

function name () {
}

一个 函数语句(或称为“函数声明”)。它只能出现在顶级脚本元素或直接作为函数元素中的一部分:也就是说,一个函数语句不能出现在if, 或者 while 等语句中。所有的函数语句都会被“提升”到函数(或脚本)的顶部, 因此以下代码是有效的:

a()
function a () { alert("a") }

在表单中:

variable = function name () {} // or variable = function () {}

function关键字处于函数表达式上下文中:它创建一个新的函数对象,并将生成的函数对象(只是一个“普通值”)分配给变量。以下内容无效,因为函数表达式不会提升。

var b
b() // oops, does not evaluate to a function-object yet!
b = function b () { alert("b") }

尽管如此,"正确的方式"是使用函数声明形式 ("function declaration") ,除非有理由使用其他形式。

祝编码愉快。


另请参阅:


1
太棒了@pst。现在完全明白了。谢谢。 - Cybercampbell

3

这些语法之间有一个重要且有用的区别。

封装

在面向对象编程中,使用封装非常有用,它是一种限制访问其他对象的机制。在JavaScript中,公共变量/函数和私有变量/函数之间的区别可以描述为:

function Color(value)
{
    // public variable
    this.value = value; // get from arguments

    // private variable
    var _name = "test";

   // public function
   this.getRandomColor = function( )
   {
     return Math.random() * 0xFFFFFF;
   }

   // private function
   function getNiceColor()
   {
     return 0xffcc00;
   }
}

测试公共

在颜色实例中,公共变量和函数是可访问的:

// create instance of Color
var color = new Color(0xFF0000);
alert( color.value ); // returns red color
alert( color.getRandomColor() ); // returns random color

测试私有变量

私有变量和函数无法从实例中访问:

var color = new Color(0x0000FF); 
alert( color.getNiceColor() ); // error in console; property does not exist, because function is private.
alert( color._name ); // error in console; property does not exist, because variable is private.

注意
在使用公共函数时最好使用传统的原型方法,因为这种编码方法可能会导致继承方面的问题。


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接