嬉しい機能【JavaScript】

嬉しい機能【JavaScript】

いくつかの JavaScript 関数の疑似本物と偽物の特性を調べます。

名前

関数オブジェクトにはname属性があり、予想どおり、このフィールドは関数名を返します。

function add(a, b) {
    
    
    return a + b;
}

console.log(add.name); // "add"

「これは何の役に立つの?」と言いたくなるかもしれませんが、これは単なる関数オブジェクトの名前ではなく、端的に言えば変数の名前です。しかし、ほとんどの場合、変数名は開発者向けです。開発者が認識できるものであれば、名前が何であれ、重要なのは価値です。

これは実用的ではなく、name変数名が常に表示されるわけではないことを意味します。シナリオは次のとおりです。

const fn = add;

console.log(fn.name); // "add"

これは少し興味深いですが、name読み取りは可能ですが書き込みはできないプロパティです。

const fn = add;
console.log(fn.name); // "add"

fn.name = "fn";
console.log(fn.name); // "add"

長さ

関数オブジェクトには、length関数のパラメーター リストの長さを示すプロパティがあります。例えば:

function add(a, b) {
    
    
    return a + b;
}

console.log(add.length); // 2

非常にシンプルで大雑把ですが、これで終わりですか? いいえ。length属性には必要なパラメータの数が反映されるというルールがあります

関数パラメータはいつオプションになりますか? 次に、ES6 の新しいデフォルト パラメータ残りのパラメータ1を試す必要があります。

function add(a, b = a) {
    
    
    return a + b;
}

console.log(add.length); // 1

function sum(...nums) {
    
    
    return nums.reduce((r, v) => r + v)
}

console.log(sum.length); // 0

デフォルト パラメーターへの追加機能は、関数にデフォルト パラメーターがある場合、lengthそのプロパティの計算が最初のデフォルト パラメーターから開始され、停止することです。

{
    
    
    function add(a = 0, b = a) {
    
    
        return a + b;
    }
    
    console.log(add.length); // 0
}
{
    
    
    // 不符合标准的写法,此处只为演示效果
    function add(a, b = a, c) {
    
    
        return a + b;
    }
    
    console.log(add.length); // 1
}

と同様にname、読み取り専用ルールがありますが、これについては再度説明しません。結論は出せますが、まだ信頼性が低く、テストポイントではありますが、実用的ではありません。

形参同名

初めてこれを見たとき、VSCode を開いて編集を開始しましたがindex.ts、赤い線を見て深く考えさせられました。誰のことを話しているのですか? これにより、この観点の存在が否定されました。

でも、待ってください、誰が TypeScript を使いたいと思っているのでしょうか? もちろん、このような楽しいことをするには JavaScript が必要です。

まず、日常生活では書けないとしても、これは存在する可能性があるということを説明しましょう。

function add(a, a) {
    
    
    return a + a;
}

console.log(add(10, 20)); // 40

これはvar変数を宣言するように動作します。後者は前者をオーバーライドします。関数のパラメーター割り当てプロセスをシミュレートできます。

var a = 10;
var a = 20;

console.log(a); // 20

次に、このフォームは非厳密モードでのみ存在できます。

"use strict"
// Duplicate parameter name not allowed in this context
function add(a, a) {
    
    
    return a + a;
}

これは低レベルのエラーであり、問​​題評価としては純粋にスキルであり、TypeScript、ESLint、IDEの時代に書くのは困難です。

-終わり-


  1. コレクション パラメーター (私はこれに慣れています)、残りのパラメーター (「ES6 入門」) とも呼ばれます。ここでは、MDN で翻訳された名前 (残りのパラメーター) を使用することにします。↩︎

おすすめ

転載: blog.csdn.net/qq_49661519/article/details/126613483