js函式的幾個特殊點

2022-09-02 06:12:08 字數 2875 閱讀 7406

在ecmascript中,

function(函式)

型別實際上是物件。每個函式都是

function

型別的例項,而且都與其他引用型別一樣具有屬性和方法。由於函式是物件,因此函式名實際上也是乙個指向函式物件的指標。

1 函式的返回值和函式作為引數傳遞

//

函式傳遞給函式

function

box(sum,num)

function

sum(num)

var result = box(sum(10),10); //

這裡傳遞的是函式的返回值

alert(result); //

30//

要把函式本身傳遞,而不是函式的結果

function

box(sum,num)

function

sum(num)

var result = box(sum,10); //

這裡sum是函式,而不是返回值

alert(result); //

20

2 this 和arguments

在函式內部,有兩個特殊的物件:arguments和

this

。arguments

是乙個類陣列物件,包含著傳入函式中的所有引數,主要用途是儲存函式引數。但這個物件還有乙個名叫

callee

的屬性,該屬性是乙個指標,指向擁有這個

arguments

物件的函式。

//

arguments.callee物件

//改進,使用arguments.callee動態呼叫自身,作用同上,但改變函式名時,裡邊的不用都修改一遍了

function

box(num)

else

}alert(box(4))*/

/*//this物件

//window是js中最外圍物件

alert(typeof window); //window物件,型別是物件

alert(this); //這時的this就是window

var color='red'; //這裡的color是全域性遍量,又是window的屬性

alert(window.color);//red

alert(this.color);//同上

//那麼

window.color = "red"//相當於var color = 'red';

var box =

}box.saycolor();// blue

//另一種寫法

window.color="紅色";

function saycolor()

saycolor(); //紅色

var box =;

box.saycolor=saycolor;

box.saycolor(); //藍色

*/

3 length 和  prototype

每個函式都包含兩個屬性:length和

prototype

。其中,

length

屬性表示函式希望接收的命名引數的個數。

//

legth屬性,傳遞引數的個數

function

box(name,age)

alert(box.length)

//2

對於prototype

屬性,它是儲存所有例項方法的真正所在,也就是原型。詳見物件導向一章詳細介紹。

ps:而

prototype

下有兩個方法:

和call()

,每個函式都包含這兩個非繼承而來的方法。這兩個方法的用途都在特定的作用域中呼叫函式,實際上等於設定函式體內

this

物件的值。

//

//這兩個方法的用途都在特定的作用域中呼叫函式,實際上等於設定函式體內this物件的值。

function

box(num1,num2)

function

sum(num1,num2)

alert(sum(10,10));

//當引數多時麻煩,可以這樣

function

sum(num1,num2)

function

box(num1,num2)

function

sum(num1,num2)

//

兩者的正真用處是改變作用域

//假如下邊直接執行saycolor是全域性紅色

var color = "紅色的";

var box =

function

saycolor()

//用call是實現物件冒充,冒充box下,或window下

saycolor.call(this); //

紅色saycolor.call(box); //

使用call()或者

來擴充作用域的最大好處,就是物件不需要與方法發生任何耦合關係

(耦合,就是互相關聯的意思,擴充套件和維護會發生連鎖反應

)。也就是說,

box物件和

saycolor()

方法之間不會有多餘的關聯操作,比如

box.saycolor = saycolor;

另:call()方法於

方法(接受的是陣列)相同,他們的區別僅僅在於接收引數的方式不同。對於

call()

方法而言,第乙個引數是作用域,沒有變化,變化只是其餘的引數都是直接傳遞給函式的。

js運算中的幾個注意點

1.除了字串參與的加法外,非number型別的值進行運算時,會將這些值轉換為number然後再運算 var res true 100 console.log res 101 var res1 true false console.log res1 1 var res2 null 10 console...

JS裡面幾個實用的封裝函式

一滾輪事件的封裝函式 function mousewheelhandle obj,handle else 呼叫外部傳遞的事件處理程式 handle down,ev 這個方法可以切換函式的執行環境,如果函式需要傳遞引數,以陣列的形式傳遞 false elseelse handle down,ev 都可...

原型的特殊點

建立乙個學生物件 function student name,age console.log student 方法體 console.log student.proto console.log function.prototype prototype原型,本質是乙個物件 student 函式是通過n...