ホームページ  >  記事  >  ウェブフロントエンド  >  jsの関数関数とは何ですか? jsでの関数の使い方

jsの関数関数とは何ですか? jsでの関数の使い方

不言
不言オリジナル
2018-08-16 09:58:3717297ブラウズ

この記事の内容は、jsの機能とは何か? js での関数の使用法は参考になると思います。

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のバインドメソッド

Functionは、バインド関数と呼ばれる新しい関数を作成するために使用され、指定されたこの値をパラメータとして受け入れ、パラメータリストを受け入れます

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

オーバーロードはありません

other 開発言語では、関数にはオーバーロードと呼ばれる機能があります。つまり、同じ名前で複数の関数を定義しますが、各関数は異なる数のパラメーターを受け取ります。プログラムは、呼び出し中に渡される実際のパラメーターの数に基づいて、どの関数を呼び出すかを決定します。
1 つの JavaScript 内に関数の重複はありません。同じ名前の関数が複数定義されている場合は、最後に定義された関数のみが有効です。

arguments オブジェクト

オーバーロードはありませんが、JavaScript は関数のオーバーロード現象をシミュレートするために引数オブジェクトを提供します。

/*
*    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

再帰

関数本体内で自分自身を呼び出す関数を再帰関数といいます。ある意味、再帰はループに似ています。どちらも同じコードを繰り返し実行し、無限ループと無限再帰を避けるために終了条件を必要とします。
関数本体で独自の関数を呼び出す方法は2通りあります

  • 独自の関数名を使用する方法

  • 引数オブジェクトの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);

特殊関数

匿名function

JavaScriptでは、関数をデータとして使用する場合、名前を設定する必要はありません。匿名関数の 2 つの使用法

  • 匿名関数をパラメータとして他の関数に渡すことができます。

  • 特定の 1 回限りのタスクを実行する匿名関数を定義できます。

コールバック関数

ある関数を別の関数の引数として使用する場合、引数として使用される関数をコールバック関数と呼びます。

//作为另一个函数参数的函数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()());

Closure

スコープチェーン

スコープチェーンは、ローカルスコープがその親がアクセスできるスコープにアクセスできることを意味します

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();

Closure

内部の関数外部スコープから何らかの方法でアクセスすると、それはクロージャになります。

var n;// 定义变量,但不初始化值
function fun(){// 函数作用域
    var v = 100;
    // 进行初始化值 -> 一个函数
    n = function(){
        console.log(v);
    }
    // n();
}
fun();

n();// 100

クロージャの役割

  • 共有ローカル変数を提供する

  • 共有ローカル変数を保護し、変数の読み書きのための特別な関数を提供する

  • 地球規模の汚染を回避する

関連推奨事項:

JavaScript関数型の紹介

JS の関数の理解を簡単に分析

ECMAScript の関数型_javascript スキル

以上がjsの関数関数とは何ですか? jsでの関数の使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。