有几种方法可以在Javascript中声明一个函数。有两种方法让我无法理解它们的用途。请参阅下面的2个声明。
var G = new function(){}; // special case: object constructor
和
var C = (function(){}); // function expression with grouping operators.
小提琴中的答案会非常有用。
答案 0 :(得分:0)
第一个初始化Object类的新实例。第二个没有做任何事情。
答案 1 :(得分:0)
您的意思是IIFE - Immediately Invoked Function Expression吗?
var value = 5;
var C = (function(arg){return arg+1})(value);
value = 10;
console.log(C); // prints 6
一个蹩脚的例子,真的......
答案 2 :(得分:0)
我希望澄清你在问题中所写的内容。在JavaScript中,基本上有两种风格'声明函数:1)使用函数声明或2)使用函数表达式。以下是示例:
function something () {
console.log( 'This is a function declaration' );
}
var orAnother = function () {
console.log( 'This is a function expression' );
};
something(); // 'This is a function declaration' will show up on console
orAnother(); // 'This is a function expression' will show up on console
两者都是在JavaScript中创建新功能的有效方法。两者几乎完全相同,除了JavaScript引擎在执行代码之前编译这些对象的方式。函数声明是 hoisted ,这个术语意味着在编译阶段,JavaScript引擎会将函数对象值赋给函数的标识符(即'某些东西') 。另一方面,函数表达式仅在执行阶段处理。在编译阶段,与函数表达式相关联的变量标识符将悬挂,但函数对象本身不会被评估并分配给标识符,直到执行阶段。
在这两种声明函数样式之间,函数表达式是我认为最常见的形式。
你可能持有的另一种误解(我假设基于你的函数G的例子)是有一种称为constructor
的特殊类型的函数。我想指出这是不正确。在JavaScript中,没有特殊的构造函数。 JavaScript只有函数 - 但是,(不幸的是在我看来)它试图通过允许你在函数调用之前使用new
关键字来模仿其他经典语言。这是一个例子:
var cat = function (color) {
this.color = color;
};
var garfield = new cat('orange'); // garfield is now a new object with a color property of 'orange'
但是,您可以在没有new
关键字的情况下轻松调用该函数:
var oops = cat('orange');
/* Depending on which environment you invoke this in, it'll give you different results.
* In browsers not under strict mode, you'll actually be adding the `color` property to
* the `window` object.
*/