javascriptのfunction

1.函数声明

使用关键字funciton关键字来声明,后面跟上一组参数以及函数体.

无参数

function boy() {      //函数的声明
    //代码
}

函数的声明已经完成,但是还不能运行,这是我们需要调用函数才能是这个函数运行.

box();  //函数的调用,调用的位置可以放在函数声明的前面        

有参数

function boy(name,age) {
    //代码
}
boy("name",age);

如果不传参数进去,就会定义为undefined


函数表达式

var print = function (){
  // ...
};

采用函数表达式声明函数时,function命令后面不带有函数名。如果加上函数名,该函数名只在函数体内部有效,在函数体外部无效。

var print = function x(){
  console.log(typeof x);
};

x
// ReferenceError: x is not defined

print()
// function

这个x只在函数体内部可用,指代函数表达式本身,其他地方都不可用。这种写法的用处有两个,一是可以在函数体内部调用自身,二是方便除错(除错工具显示函数调用栈时,将显示函数名,而不再显示这里是一个匿名函数)

需要时,可以采用下面的形式声明函数。
var f = function f() {};

函数的属性和方法

name属性
name属性返回紧跟在function关键字之后的那个函数名

function f1() {}
f1.name // 'f1'

var f2 = function () {};
f2.name // ''

var f3 = function myName() {};
f3.name // 'myName'

length属性
返回函数定义中参数的个数

function f(a, b) {}

f.length   //2

toString

返回函数的源码

function f() {
    a();
    b();
    c();
}
f.toString();
function f() {
    a();
    b();
    c();
}

函数内内部的注释也是可以返回的

函数内部的变量提升

var 命令声明的变量,不管在什么位置,变量声明都会被提升到函数体的头部.

function foo(x) {
    if (x > 100) {
        var tmp = x -100;   
    }
}

等同于
function foo(x) {
    var tmp;
    if (x > 100) {
        tmp = x -100;
    }
}

函数本身的作用域

函数本身也有一个值,也有自己的作用域.她得作用域绑定其声明时所在的作用域

var a = 1;
var x = function () {
    console.log(a);
};
function f() {
    var a = 2;
    x();
}
f();  //1

函数x在函数f的外面声明的,所以它的作用域绑定外层,内部变量a不会到函数体f体内取值.

2.return返回值

函数都是调用后直接执行的.实际上,任何函数都可通过return语句跟后面的要返回的值来实现返回值.

function boy() {
    return "Hello world!"            //表示把这句话字符串返回回来
}

这时我们使用boy()进行调用,是没有作用的.
它实际进行的操作为:

boy() = "Hello world!";

alert(boy());  //调用函数返回值,然后输出

有参数的同理是一样可以得到的.

我们还可以把函数的返回值赋给一个变量,然后通过变量进行操作.
var strInfo =  boy('马云',40);
alert(strInfo);

return与具有还有一个功能是退出当前函数

function boy() {
    if( num < 5 ) return num; //满足条件,返回num
    return 100;  //返回之后,就不执行下面的语句了
}
alert(box(10));

3.arguments对象

ECMAScript函数不介意传递进来多少参数,也不会因为参数不统一而错误.实际上,函数体内可以通过arguments对象来接收传递进来的参数.

function boy() {
    return arguments[0]+'|'+arguments[1]+'|'+arguments[2];
}

boy("boy",23,"web前端");

可以利用length的属性(arguments.length),来进行动态操作.

4.重载:根据不同的参数调用相同的函数

function box(num,a) {
    return num + 100;
}

function box(num) {  //第二个函数把第一个函数覆盖掉,不具备重载功能
    return num + 150;
}

alert(box(50,1)); //重载就是根据参数,选择相同函数名而参数不同的函数

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章