目录:

简单介绍下关于JS函数使用过程中的一些情况。

一、函数的参数

1、调用函数时没有提供足够的参数,缺少的参数将会被underfined替代。

function add(a,b){
    console.log("a:"+a); // a:1
    console.log("b:"+b);// b:underfined
    return a + b;
}
console.log(add(1)); //NaN 1和underfined相加为NaN

2、调用参数时,给予了超过要求个数的参数,多余的将会被忽略。

function add(a,b){
    console.log("a:"+a);
    console.log("b:"+b);
    return a + b;
}
console.log(add(2,3,8));//5  第三个参数“8”时多余的,被忽略了。

注:函数实际上是访问了函数体中一个名为 arguments 的内部对象,这个对象就如同一个类似于数组的对象一样,包括了所有被传入的参数。

二、函数的返回值

1、在函数中return 语句在返回一个值并结束函数。如果没有使用 return 语句,或者一个没有值的 return 语句,JavaScript 会返回 undefined。

function returnNone1(){

}
console.log(returnNone1());//underfined

function returnNone2(){
    return ;
}
console.log(returnNone2());//underfined

三、立即执行函数

1、问题描述:
通常我们在声明函数之后,通过在后面添加括号进行执行,如下代码所示:

var foo = function(){ /* code */}
foo();

那么这个是不是意味着我们在声明函数的时候直接在它后面添加括号,它就可以立即执行了,比如这样:

function(){ /* code */ }();

然而运行时会报错,因为在解析器解析全局的function或者function内部function关键字的时候,默认是认为function声明,而不是function表达式。

2、解决方案:
只要我们让解析器知道我们这个地方代表着是function表达式就行了。
如下所示:

//1、使用“()”
(function () { /* code */ } ()); // 推荐使用这个
(function () { /* code */ })(); // 但是这个也是可以用的

//2、由于括弧()和JS的&&,异或,逗号等操作符是在函数表达式和函数声明上消除歧义的,所以一旦解析器知道其中一个已经是表达式了,其它的也都默认为表达式了。
var i = function () { return 10; } ();
true && function () { /* code */ } ();
0, function () { /* code */ } ();

// 3、如果你不在意返回值,或者不怕难以阅读,你甚至可以在function前面加一元操作符号。
!function () { /* code */ } ();
~function () { /* code */ } ();
-function () { /* code */ } ();
+function () { /* code */ } ();

//4、使用new关键字,也可以用
new function () { /* code */ }
new function () { /* code */ } () // 如果需要传递参数,只需要加上括弧()
10-04 11:04