函式內部有兩個特殊物件,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 的分割槽依賴乙個父 ...