JavaScript 参照データ型の関数タイプ: 関数の作成、関数の内部プロパティ、関数のプロパティとメソッドなど。

JavaScript参照データ型の関数型

(1) 関数の作成

var add = function(x,y){
    
    
  return x+y;
};
console.log(add(10,10));//20

(2) js関数がオーバーロードされていない

function sum(x,y){
    
    
  return x+y+',执行函数1。。。。';
}

function sum(x,y){
    
    
  return x+y+',执行函数2。。。。';
}
console.log(sum(10,10));       //20,执行函数2。。。。

(3) 価値の関数として

function callSomeFunction(someFunction,someArg){
    
    
  return someFunction(someArg)       //返回一个函数和参数add10(20)
}
function add10(num){
    
    
  return num+10;
}
console.log(callSomeFunction(add10,20));   //函数add10()作为参数传入callSomeFunction()

(4) 関数の内部属性: 引数、this、呼び出し元

1. 引数: パラメータを保存します。引数は配列のようなオブジェクトであり、その属性の callee は、この引数オブ​​ジェクトを所有する関数、つまり f() を指すポインタです。

function f(num){
    
    
  if(num<=1) return 1;
  else return num*arguments.callee(num-1);  
}
console.log(f(5));//120  

5 f(4)=5 4 f(3)=5 4 3 f(2)=5 4 3 2 f(1)=5 4 3 2 2*1=120

2、これ

window.color = 'red'
var obj = {
    
    color:'blue'}
function sayColor(){
    
    
  console.log(this);
}
sayColor();                //this是widow全局对象 
obj.sayColor = sayColor;
obj.sayColor();            //this是对象obj的执行环境对象

3. caller: 現在の関数 (この関数を呼び出す関数) を呼び出す関数への参照を保持します。

function outer(){
    
    
  inner();
}
function inner(){
    
    
  console.log(inner.caller);//ƒ outer() {inner();}
  console.log(arguments.callee.caller);//访问相同信息   ƒ outer() {inner();}
}
outer();

(5) 関数の属性: 長さ、プロトタイプ

1. 長さ: 関数が受け取りを希望する名前付きパラメータの数。

console.log(sum.length);

2. プロトタイプ: すべてのインスタンス メソッドの実際の場所を保存します。E5 では列挙できないため、for-in を使用して検出できません。

console.log(sum.prototype);

(6) 関数メソッド: apply()、call()、bind()

関数本体にオブジェクトの値を設定します(関数本体内で this のポインタを変更します)

1. apply() はパラメーターを渡します: this+パラメーター配列

function callSum1(n1,n2){
    
    
  return sum.apply(this,arguments);
}
function callSum2(n1,n2){
    
    
  return sum.apply(this,[n1,n2]);
}

2. call() はパラメーターを渡します: this + 複数のパラメーター値

function callSum3(n1,n2){
    
    
  return sum.call(this,n1,n2)
}
function callSum4(n1,n2){
    
    
  return sum.cal(this,arguments[0],arguments[1])
}
console.log(callSum1(10,20));   
console.log(callSum2(20,20));    
console.log(callSum3(10,40));    
console.log(callSum4(20,40));    

3.bind() 受信パラメータ: バインドされた関数の this 値を指定します。

window.color = 'red'
var obj = {
    
    color:'blue',name:'HNN'}
function sayColor(){
    
    
  console.log(this.color);
}

var objSayColor = sayColor.bind(obj)   //绑定函数的this值为obj后执行  <==> sayColor.bind(obj)()
objSayColor()              //blue    this=>obj
sayColor()                 //red     this=>window

4. 機能: 機能の動作範囲を拡大します。

function People(name,age){
    
    
  this.name = name;
  this.age = age;
  console.log(this);
}
function Student(name,age,grade){
    
    
  People.call(this,name,age)      //this代表Student,使用Student调用People中的方法,将name,age参数传过去
  this.grade = grade;
  console.log(this);
}
var stu = new Student('小明',18,'大三');
console.log(stu.name+","+stu.age+","+stu.grade);//小明,18,大三

おすすめ

転載: blog.csdn.net/m0_47147246/article/details/125731949