ホームページ  >  記事  >  ウェブフロントエンド  >  JS 関数の一般的な問題の説明

JS 関数の一般的な問題の説明

jacklove
jackloveオリジナル
2018-05-21 10:54:341464ブラウズ

勉強中にJavaScript関数の問題に遭遇することがよくありますが、この記事ではそれについて説明します。

関数宣言と関数式の違いは何ですか

関数式と関数宣言ステートメントには同じ関数名が含まれており、両方とも新しい関数オブジェクトを作成するのが主な違いです

関数宣言 関数。 name は変数であり、その変数は関数オブジェクトを指します。変数プロモーションは、変数と関数の関数本体です。

関数式は var を介して割り当てられ、関数全体が新しい変数に割り当てられ、変数は新しい変数名にプロモートされ、関数の初期化コードは元の位置に残ります。

変数の事前宣言とは何ですか?関数の事前宣言とは何ですか? 変数の事前宣言は、デフォルトでは次のコードになります:

var a; );

a = 1 ;

関数宣言が先頭に追加されました

console.log(a);var a = 1;
结果为underfined

関数宣言が先頭に追加されました。関数内の引数を使用して、すべての関数のパラメータを取得します。

以下のコード:

a()function a(){console.log ("hello") }

関数のオーバーロードの実装方法

JSには関数のオーバーロードという概念がありません。パラメータが異なっていても、後続の新しい関数は同じ名前で前の関数を上書きします。

function a(){                   //将函数声明提升console.log ("hello") }a()
arguments 是什么

上図からわかるように、後者の P 関数が上側の P 関数をカバーしています。

即時実行関数式とは何ですか?関数とは

関数式の即時実行とは、関数宣言全体を()で囲んで関数式にし、引数に続いて関数を即時実行することです。

function ( ){ } 関数宣言は ( function (){ }) ( ) に変換されます

関数:

変数プロモーションの干渉を受けることなく、独自のスコープと独立したローカル変数を生成し、内部変数と外部変数間の競合を軽減します おそらく、一度実行すると変数が破棄されます。

関数のスコープチェーンとは

JSではグローバル変数とローカル変数に分かれており、グローバル変数は関数内でアクセスできますが、関数内のローカル変数は関数外ではアクセスできません。が関数内にある場合、まず変数がこのスコープ内で定義されているかどうかを確認し、定義されていない場合は、必要な変数が見つかるまで次のレベルを検索します。グローバル変数に見つからない場合は、エラーが報告されます。外部変数との干渉を避けるために、ローカル変数を使用するようにしてください。

1. コードの出力

function say(name,sex,age){  console.log(arguments);
}console.log('name:jiuyi',"sex:男",'age:54')
结果为:"name:jiuyi""sex:男""age:54"

2. パラメーターの二乗の合計を返す関数を作成します

      function p(a,b,c) {  
           console.log(a+b+c);  
       }  
 
       function p(a,b) {  
           console.log(a+b);  
       }       console.log(p('hello','jiuyi','yes'));       console.log(p('hello'))
结果为:  "hellojiuyi"
 "helloundefined"

3. 次のコードの出力は何ですか?理由

console.log(a); //JS はグローバル変数をプロモートするため、a は宣言されるだけで割り当てられないため、出力が制限されます。 var a = 1; //エラーが報告されます。 b は宣言または割り当てられていません。

4. 次のコードの出力は何ですか?なぜ

  function getInfo(name, age, sex){        console.log('name:',name);        console.log('age:', age);        console.log('sex:', sex);        console.log(arguments); //代表实际参数,所以输出实际参数内容
        arguments[0] = 'valley';//name赋值为valley
        console.log('name', name);//所以这里参数输出为valley
    }
    getInfo('hunger', 28, '男');
    getInfo('hunger', 28);
    getInfo('男');
结果为:
name: hunger
 age: 28
 sex: 男
["hunger", 28, "男"]
name valley
 name: hunger
 age: 28sex: undefined
 ["hunger", 28]
 name valley
name: 男
age: undefined
 sex: undefined["男"]
name valley

結果は次のようになります:

hello world //関数宣言プレフィックス関数sayName(name)が最上位に昇格するため、sayNameには宣言とコンテンツがあります。エラー報告 //varsayAgeが先頭に変数宣言があり、sayAge関数が宣言されていないため、エラーが報告されます。

5. 次のコードの出力は何でしょうか?なぜ

  function sumOfSquares(){   var x = 0;   for(var i = 0;i<arguments.length;i++){
   x = x + arguments[i]*arguments[i]
   }   console.log(x)
   }
   sumOfSquares(2,3,4);   
   sumOfSquares(1,3);
结果为:2910

6. 次のコードの出力なのでしょうか?なぜ

sayName(&#39;world&#39;); 
sayAge(10); function sayName(name){ console.log(&#39;hello &#39;, name);
 } var sayAge = function(age){ 
console.log(age); 
};

7. 次のコードの出力なのでしょうか?なぜ

function fn(){} 
 var fn = 3; console.log(fn);
相当于:  var fn;  function fn(){} ;
  fn = 3;  console.log(fn);    //所以输出为3

8.次のコードの出力なのでしょうか?なぜ

function fn(fn2){   console.log(fn2);   //输出 function fn2(){ console.log(&#39;fnnn2&#39;);}
   var fn2 = 3;   console.log(fn2);   //输出3
   console.log(fn);    //输出 function fn(fn2){ console.log(fn2); var fn2 = 3; console.log(fn2); console.log(fn); function fn2(){ console.log(&#39;fnnn2&#39;); } } fn(10);
   function fn2(){ 
     console.log(&#39;fnnn2&#39;);  //不输出,函数未调用
   } 
} 
fn(10);
相当于:var fn2;                            //声明前置function fn(fn2){  
   function fn2(){                   //函数声明前置
     console.log(&#39;fnnn2&#39;);          //此函数不输出,未调用
   } 
   console.log(fn2);               // 调用的其实是函数fn2
   fn2 = 3;             
   console.log(fn2);            // 此时fn2已被赋值为3
   console.log(fn);              //调用的其实是fn整个函数}
fn(10);

9. 次のコードの出力なのでしょうか?なぜ

  var fn = 1;    function fn(fn){         console.log(fn);
    }    console.log(fn(fn));       //结果报错,变量提升,fn为1,直接调用1出错结果相当于:    var fn;    function fn(fn){         console.log(fn);
    }
    fn = 1;    console.log(fn(fn));

10. 次のコードの出力なのでしょうか?

console.log(j);   //变量提升输出undefined
 console.log(i);    //变量提升输出undefinedfor(var i=0; i<10; i++){   //i循环后结果为10var j = 100; 
} console.log(i);    //输出10
 console.log(j);    //输出100

のコードは次のコードと同等であるのはなぜですか: varsay;

 fn();   var i = 10;   var fn = 20;   console.log(i);   function fn(){       console.log(i);       var i = 99;
       fn2();       console.log(i);       function fn2(){
           i = 100;
        }
    }
代码相当于:var i; 
var fn;function fn(){  
  var i ;  function fn2(){
  i = 100;
  } console.log(i);    //只有声明未赋值输出underfined
  i = 99;
  fn2();                  //经过运行I=100
  console.log(i);      //输出100}
fn();
i = 10;
fn = 20;console.log(i);             //输出10

関数sayは即時実行関数であり、実行結果は10、9、8、7、6、5、4、3、2です。最終的なsay値は0なので、出力は0です

この記事では、js関数の一般的な問題について説明します。関連コンテンツの詳細については、PHP中国語Webサイトを参照してください。


関連する推奨事項:

JavaScript関連関数の説明

jquery DOMとイベントの説明

関連するモジュールの基本

以上がJS 関数の一般的な問題の説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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