JavaScript函数能够不仅仅是单纯封闭一堆代码,而等待调用执行。功能随着时间而演变,导致新的定义,执行方法和语法。本文将介绍一些JavaScript基础教程的函数都起到到目前为止目前的角色。
了解表达和定义功能的不同的方式开辟了在JavaScript教程中更优化的方式实现逻辑的可能性。此外,您可以更轻松地回答面试问题。

函数表达式
当你只是状态的功能与作用的关键字码,可选参数和身体,这是一个函数声明。
把这一宣言在JavaScript表达式(如在转让或算术表达式),它成为一个函数表达式。
// Function declaration
function function_name() {};
// Function expression
var function_name = function() {};
所有的JavaScript 教程声明悬挂评估过程中(在适用范围上移)。因此,写一个函数调用之前函数的声明是好的(因为声明总会被感动了)。
function_name();//function call[WORKS]
function function_name(){};
函数表达式但由于功能不悬挂成为了表达的一部分,不是独立的声明。
function_name();//function call[WON'T WORK]
var function_name = function(){};
立即调用函数表达式(生活to)
这是一个函数表达式,代码其中被立即执行(仅一次时,它的评估)。您可以创建一个通过简单地增加()(用于调用一个函数语法)的函数表达式之后。它们可以是匿名的(没有名字与调用它)。
下面是两个最常见的语法来创建生活to:
(function optional_function_name() {
//body
}());
and
(function optional_function_name() {
//body
})();
周围的函数声明括号将其转换为一个表达式,然后添加()调用该函数后。您可以使用其他方式来创造生活to只要你加()的函数表达式(如下图所示)之后,但首选的方法是以上两种。
// Some of the ways to create IIFEs
!function() { /* ... */ }();
+function() { /* ... */ }();
new function() { /* ... */ };
生活to是理想的编写需要只执行一次代码,命名空间,创造倒闭,创建私有变量等等。下面是生活to使用的一个例子。
var page_language = (function () {
var lang;
// Code to get the language of the page
return lang;
})();
代码即可获得该网页的语言只执行一次(最好在页面加载)。该结果存储在page_language供以后使用。
方法:
当一个函数是一个对象的属性,它被称为方法。因为一个函数也是一个对象,在另一个功能的功能也是一个方法。下面是用于内物体的方法的一个例子。
var calc = {
add : function(a,b){return a+b},
sub : function(a,b){return a-b}
}
console.log(calc.add(1,2)); //3
console.log(calc.sub(80,2)); //78
ADD和SUB功能是计算对象的方法。
现在在功能例如一个函数:
function add(a){
return function(b){return a+b;}
}
console.log(add(1)(2)); // Output is 3
返回的匿名函数是函数添加一个方法。
注意:功能由于参数(一)添加在上述的例子是可用于以下的功能调用,这种类型的处理被称为钻营。
构造函数
当你的函数之前添加新的关键字,并调用它,它成为创建实例的构造函数。下面就是构造用于创建水果的实例和值被添加到每个果实的属性的一个例子。
function Fruit(){
var name, family; // Scientific name & family
this.getName = function(){return name;};
this.setName = function(value){name=value};
this.getFamily = function(){return family;};
this.setFamily = function(value){family=value};
}
var apple = new Fruit();
apple.setName("Malus domestica");
apple.setFamily("Rosaceae");
var orange = new Fruit();
orange.setName ("Citrus × sinensis");
orange.setFamily ("Rutaceae");
console.log(orange.getName()); // "Citrus × sinensis"
console.log(apple.getName()); // "Malus domestica"
console.log(orange.getFamily()); // "Rutaceae"
箭头功能(ES6标准)只有在Firefox] 从ES6标准新函数定义为函数表达式较短的语法。语法是
() => { /* body */ }
This sample function:
var sing = function(){
console.log('singing...')
};
is the same as:
var sing = () => {
console.log('singing...')
};
箭头函数是匿名的,并且不具有其自己的这个值,thisinside它将在封闭代码是与此相同。此外,你不能将它更改为新的关键字构造。
他们是有用的,当你想要这个函数里面是一样的外面和更短的语法,使编程语言代码在功能简洁的书写功能(如下所示)
setInterval(function () {
console.log('message')
}, 1000);
into
setInterval(() => console.log('message'), 1000);
#p#分页标题#e#
生成功能(ES6标准)只有在Firefox] 从ES6标准的另一个新功能定义生成功能。发电机的功能能够制止并继续执行。它的语法是:
function* function_name(){}
or
function *function_name(){}
发电机的功能创建迭代器。迭代器的下一个方法然后被用于执行该代码的生成器函数中,直到屈服关键字为止。在此之后,确定yield关键字的迭代值由发生器函数返回并执行被暂停。
该发电机的功能再次执行时,下一个方法被调用,直到下一次产量关键字为止。一旦表达式的执行产量总之,产生价值返回undefined。
下面是一个简单的例子:
function *generator_func(count) {
for(var i=0;i
下面是另一个例子:
function *randomIncrement(i) {
yield i + 3;
yield i + 5;
yield i + 10;
yield i + 6;
}
var itr = randomIncrement(4);
console.log(itr.next().value); //7
console.log(itr.next().value); //9
console.log(itr.next().value); //14
还有它传递值到另一个发生器功能的产量*表达
function *fruits(fruit) {
yield* veggies(fruit);
yield "Grapes";
}
function *veggies(fruit){
yield fruit + " and Spinach";
yield fruit + " and Broccoli";
yield fruit + " and Cucumber";
}
var itr = fruits("Apple");
console.log(itr.next().value); //"Apple and Spinach"
console.log(itr.next().value); //"Apple and Broccoli"
console.log(itr.next().value); //"Apple and Cucumber"
console.log(itr.next().value); //"Grapes"
console.log(itr.next().value); //undefined
如果你想通过暂停它,而不是在一个像去通过数组循环逐一通过在值您的首选点代码生成功能非常有用。
结论
我已经包含以上的引用列表,在这里您可以链接到单独去深入不同主题的参考文献和JavaScript基础教程文章。无论是ES6标准功能只能在Firefox此刻工作。想了解更多JavaScript视频教程的内容课程欢迎来课课家教育进行查询观看!
