引言:
Why I have to learn function and now prefer using it as much as possible? Well, primarily there are two reasons: First of all, functions make codes more readable; Secondly, it can avoid the duplication of codes again and again.
举个栗子:
我们来看看function如何让代码结构更具有易读性。如果现在我们的任务是:打印出2到n区间内的所有素数。
approach 1:
outer:
for( let i = 2; i <= n; i++)
{
for( let j = 2; j <= i; j++)
{
if (i % j == 0) continue outer;
// not a prime number, continue to next iteration of outer loop.
}
alert( i+"\n");
}
approach 2 (using function isPrime() ):
function isPrime(n)
{
for( let i = 2; i < n; i++)
{
if ( n % i == 0) return false;
}
return true;
}
for( let i = 2; i <= n; i++)
{
if( isPrime(i) ) alert( i+"\n"); // This part is more readable!
}
2. Function expression
2.1 syntax
在一般情况下,我们定义函数prefer function declaration的方式,也就是:
function name(arg1,arg2,...,argN)
{
//body, 如果没有return value, 默认函数return undefined.
}
可以看到function declaration的code是statement, 包含在代码块中常常看到的花括号{}
,现在我们提出一种新的函数定义方式:
let sum=function( a, b ){
return a+b;
}; // " ;" is added here because it is a expression.
function expression的语法更像是expression,所以结尾会有;
2.2.1 用法1:
function ask( question, yes, no)
{
if( confirm( question ) ) yes();
else no();
}
ask("Are you sure?",
function(){ alert("Ok, I get it.") },
function(){ alert("I will cancel it.") }
);
2.2.2 用法2:
let welcome;
let age=prompt("How old are you?","");
welcome= (age >= 18)
? function( ){ alert("adult"); }
: function( ){ alert("teenager"); } ;
welcome();
// rewrite with arrow function
let age=prompt("How old are you?","");
let welcome= (age >= 18)
? () => alert("adult")
: () => alert("teenager");
welcome();
Summary:
在JavaScript中,function name也可以看成是一个variable, 存放的value是function的source code, 其他primitive type的variable存放的value是data, function variable存放的value可以看成是action.
3. Arrow function
3.1 Syntax
let sum=(a,b) => a+b;
let double=n => n*n; //只有一个参数时,()可以省略
let greeting=() => alert("Hello"); //没有参数的时候,()不可以省略
(para1, para2,..., param) => statement/expression
如果arrow function的代码语句部分是statement, 函数return undefined; 如果是expression, 函数return expression。
网友评论