JavaScript函式內部屬性

2021-09-24 08:31:55 字數 1905 閱讀 5038

函式內部有兩個特殊物件,this、arguments,其中arguments是乙個類陣列物件,包含著傳入函式中的所有引數,主要用來儲存函式引數。arguments物件還有乙個callee屬性,callee是乙個指標,指向擁有這個arguments物件的函式。

function fact(num)else

}複製**

這是乙個實現階乘的函式,採用遞迴的方式,這種方式存在乙個問題就是,當fact的名稱更改以後,如果不及時更改函式內部的函式名稱,該函式則無效。此時採用callee屬性替代當前擁有num引數物件的函式也就是fact.

採用callee實現如下

function

fact(num)else

}複製**

this是乙個引用指標,指向的是函式執行的環境物件
this引用的是函式執行的環境物件,當函式被當做某個物件的方法呼叫時,此時的this物件引用的是當前呼叫函式的物件。
不同的環境this指向的值不同,下面是幾種this在不同執行環境下所指向的值

當函式作為物件方法的時候,函式裡的this被繫結到當前物件上

例如:

var mynum = 

};mynum.increment(3);

console.log('example1:'+mynum.value);//example1:4

複製**

上述的increment是乙個物件方法,該物件方法內部的this指向的就是當前物件

當函式作為非物件方法時候,this繫結到全域性物件window,如果此時要呼叫內部函式可以採用that = this。

// 一般的函式

function

add(a)

var value = 2;

mynum.count = function ()

help();

console.log(this.value);//4

}mynum.count();

that = this方式

var value = 2;

mynum.count = function ()

help();

console.log(that.value);//3

}mynum.count();

複製**

用new運算子呼叫建構函式,會先建立乙個連線到建構函式的prototype(原型物件),再將this繫結到該物件

function person(name)

person.prototype.sayname = function()

var person1 = new person('tom');

console.log(person1.sayname());

複製**繫結this到指定的環境物件

var people = 

console.log(person.prototype.sayname.bind(people)());

console.log(person.prototype.sayname.call(people));

複製**

es6箭頭函式裡的this指向定義時所在的物件,不是執行的環境物件,就說明this在箭頭函式裡使用時是乙個不變的值 

function foo(),1000)

}var name = "kiki";

foo.call();//name:didi

箭頭函式裡this的值指向的是定義時所在的環境物件,es5中實現箭頭函式的方法:採用 that = this這種機制,實現this的繫結

以上是對函式的內部屬性的理解。複製**

js 函式的內部屬性

函式內部有2個特殊物件 arguments this 1 arguments 是乙個類陣列物件,包含傳入函式中的所有引數,雖然它的主要用途是儲存函式引數,但這個物件還有乙個名叫 callee 的屬性。這個屬性是乙個指標,指向擁有這個 arguments 物件的函式 這是乙個非常經典的階乘函式。定義階...

js函式 內部屬性 方法 遞迴呼叫

函式的內部屬性argument介紹 1 該物件是函式的內部的物件,只能在函式體中使用,直接使用即可。2 arguments是乙個物件,用來代表實參資料。1 arguments物件有乙個屬性,length 代表了實參的個數。2 arguments物件中的實參資料,每個實參都對應乙個序號,序號從0開始。...

spark RDD的5個重要內部屬性

rdds 介面的五個屬性 下表總結了 rdds 的五個屬性 rdds 依賴關係 在 spark 中,rdd 之間的依賴關係分為兩類 1.窄依賴 每個父 rdd 的分割槽都至多被乙個子 rdd 的分割槽使用,即為 onetoonedependecies 2.寬依賴 多個子 rdd 的分割槽依賴乙個父 ...