首頁 >web前端 >js教程 >js的function函數是什麼? js中function的用法

js的function函數是什麼? js中function的用法

不言
不言原創
2018-08-16 09:58:3717401瀏覽

本篇文章帶給大家的內容是關於js的function函數是什麼? js中function的用法,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

Function與函數

Function是JavaScript提供的一種參考類型,透過Function類型建立Function物件。
在JavaScript中,函數也是以物件的形式存在的,每個函數都是一個Function物件。

//字面量方式创建函数
var fun =function () {
    console.log(100)
};
//函数声明方式创建函数
function fn () {
    console.log(200)
};
/*     创建Funtion类型的对象
*       var 函数名 = new Function('参数',''函数体)*/
var f = new Function('a','console.log(a)');
f(2);//以函数方式调用

Function類型

Function的apply()方法

Function的apply()方法用來呼叫函數,並且接受指定的this值,以及一個陣列作為參數。

//定义函数
function fun(value) {
    console.log(value)
}
/*
函数的apply()方法——>用于调用一个函数
     函数名.apply(thisArg,[argsArray])
       thisArg——>可选项,函数运行时使用的this值
       argsArray——>可选项,一个数组或者类数组对象,其中的元素作为单独的参数传给Function函数。*/
fun.apply(null,['100']);

Function的call()方法

Function的call()方法用來呼叫函數,並且接受指定的this值,以及參數清單。

var fun  = function (value,a,b,) {
    console.log(value,a,b,)
}
/*
*   call()方法调用函数
*   函数名.call(thisArg,arg1,arg2,…)
*
*   和apply()的区别在于提供参数的方式不同
*/
fun.call(null,2,3,4);//2 3 4

Function的bind方法

Function用於創造一個新的函數,稱為綁定函數,並且接受指定的this值作為參數,以及參數列表

var fun = function (a,b,c) {
    console.log( a,b,c)
}
/*  bind方法->相当于复制一份当前函数
*   函数名.bind(thisArg,arg1,arg2,...)
*     thisArg->当绑定函数被调用时,该属性作为原函数运行时的this指向
*     arg->参数。当绑定函数被调用时,这些参数将在实参之前传递给被绑定的方法
*     */

var v =fun.bind(null,2,3,4);
v();//2 3 4

沒有重載

在其他開發語言中,函數有一個特性叫做重載。就是定義多個同名的函數,但沒一個函數接收的參數個數不同,程式會根據呼叫時傳遞的實參數來判斷,具體呼叫的是哪個函數。
單JavaScript中函數是沒有重疊現象的,如果定義多個同名的函數,只有最後一個定義的函數是有效的。

arguments物件

雖然沒有重載,但JavaScript提供了argumengs物件可以模擬函數重載的現象。

/*
*    argumengs对象
*    *该对象存储当前函数中所有的参数(实参)->类数组对象
*    *该对象一般用于函数中
*    *作用-用于获取当前函数的所有参数
*    *arguments.length->函数所有参数(实参)的个数*/
function fun() {
    var num = arguments.length;
    switch (num){
        case 2://参数个数
            return arguments[0]+arguments[1];
        break;
        case 3:
            return arguments[0]+arguments[1]+arguments[2];
        break;
    }
}
console.log(fun(4,5));//9
console.log(fun(4,5,6));//15

遞歸

在函數體內呼叫自身的函數稱為遞迴函數。在某種意義上來說,遞歸近似於循環。兩者都重複執行相同的程式碼,都需要一個終止條件來避免無限迴圈和無限遞歸。
在一個函數體內,想要呼叫自身函數,有一下兩種方式

  • 透過使用自身函數名稱實作

  • 透過使用arguments物件的callee屬性來實作

/*//无线递归
function fun() {
    console.log('23')
    fun()//调用自身函数,实现递归
}
fun()*/

function fn(v) {
    console.log(v);
    if (v>=5){
        return
    }
    /*fn(v+1)*///使用该方法终止递归当执行下列代码输出时,报错
    arguments.callee(v+1)
}
/*fn(0)*/
var f = fn;
fn=null;
f(0);

特殊函數

匿名函數

在JavaScript中,當把函數當做數據使用時,可以不設定名字。匿名函數的兩種用法

  • 可以將匿名函數當作參數傳給其他函數。

  • 可以定一某個匿名函數執行某些一次性任務。

回呼函數

當一個函數作為另一個函數的參數時,作為參數的函數稱為回呼函數。

//作为另一个函数参数的函数fun->回调函数
var fun = function () {
    return 2;
};

function fn(v) {
    return v();
}
/*
var result=fn(fun);//函数fun作为函数fn的实参
console.log(result);
*/

//以上代码等同于以下代码
//以下代码中作为参数的函数->匿名回调函数

var f = fn(function(){return 2;});
console.log(f);

自調函數

自調函數就是在定義函數後自行呼叫

/*    自调函数->定义即调用的函数
*      相当于在匿名函数外加了小括号
*      第一对括号->定义函数
*      第二对括号->调用函数*/

(function () {
    console.log('23')
})()//23->后边的括号表示调用

作為值的函數

一個函數作為另一個函數的結果進行返回,作為結果返回的函數稱為作為值的函數

var one = function(){
    return 100;
}
// 作为值的函数 -> 内部函数的一种特殊用法
function fun(){
    var v = 100;
    // 内部函数
    return function(){
        return v;
    };
}

var result = fun();
// console.log(result);// one函数
// console.log(result());// 100

console.log(fun()());

閉包

作用域鏈

#作用域鏈就是指局部作用域可以存取它的父級所能存取的作用域

var a = 10;// 全局变量
function fun(){
    var b = 100;// fun函数作用域的局部变量
    // 内部函数
    function fn(){
        var c = 200;// fn函数作用域的局部变量
        // 内部函数
        function f(){
            var d = 300;// f函数作用域的布局变量
            // 调用变量
            console.log(a);// 10
            console.log(b);// 100
            console.log(c);// 200
            console.log(d);// 300
        }
        f();
        // 调用变量
        // console.log(a);// 10
        // console.log(b);// 100
        // console.log(c);// 200
        // console.log(d);// d is not defined
    }
    fn();
    // 调用变量
    // console.log(a);// 10
    // console.log(b);// 100
    // console.log(c);// c is not defined
    // console.log(d);// d is not defined
}
fun();

#閉包

  • 當內部任何一個函數被通過一種方式被任何一個外部作用域存取時,就是一個閉包。

    var n;// 定义变量,但不初始化值
    function fun(){// 函数作用域
        var v = 100;
        // 进行初始化值 -> 一个函数
        n = function(){
            console.log(v);
        }
        // n();
    }
    fun();
    
    n();// 100
    閉包的作用
  • 提供可享的局部變數
  • 保護共享的局部變量,提專門讀寫入變數的函數

避免全域污染


#相關推薦:

JavaScript Function函數型別介紹

淺析JS中對函數function的理解

##########ECMAScript中函數function類型_javascript技巧#######

以上是js的function函數是什麼? js中function的用法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn