javascriptの中のargments
3109 ワード
javascript関数の中で、識別子argmentsは特別な意味を持っています.オブジェクトを呼び出す特殊な属性で、Agmentsオブジェクトを参照します.Argementsオブジェクトは配列のようですが、ここでは像だけが哈ではないことに注意してください.
javascript関数の体内では、argmentsは配列のように、length属性があり、関数に伝えるパラメータの個数を表すことができます.
一つの形式パラメータを参照すると、パラメータ名を使用しても良いし、argments[]配列形式を使用しても良いし、ここでargments[0]は最初のパラメータを表しています.
だから、javascriptの中でAgmentsオブジェクトは関数の実際のパラメータです.次に、私達は一緒にこの不思議な国に入ります.argments.length属性:
jsは主動的にあなたのためにあなたが一体どれだけのパラメーターを関数に伝えたかを判断することはできません.もしあなたがマルチパスしたら、余分な部分は使われません.
だから、私たちはargmentsのlength属性を使って、関数を呼び出す時に正しい数の実際のパラメータを使っているかどうかを検出できます.javascriptはあなたのためにこれらのことをしないからです.
機能 f
(x)
を選択します
を選択します
)
{
//まず伝達パラメータの数が正しいか確認します.
if
(argments.
length
!= 3
)
{
throw
new エロエロ
(
「function f caled with」
+ アーグメンント.
length
+
"argments,but it not 3 argments."
)
;
)
//下で本当の関数を実行します.
)
argmentsはまた、関数のために任意の数の実際のパラメータを伝える可能性を提供してくれます.
例えば、あなたが私に送った数字の大きさを判断したいです.一番大きいのを取り出してください.そうです.どのぐらいのパラメーターを送ってもいいです.しかし、前提はあなたが数字を送るので、関数の内部で判断するのがおっくうです.はあ
機能 max
(
)
{
//前の日記によると、これはJavaScriptの中で一番小さい数字です.
var m
を選択します. Number.
NEGATIVE_INFINITY
;
for
(
var i
を選択します.
0
; i
<> アーグメンント.
length
; i
++
)
{
//どのパラメータがmより大きいとmはこのパラメータの値になります.
if
(argments
[i]
」
> m
)
m
を選択します. アーグメンント
[i]
」
;
)
return m
;
)
どうですか?この方法は巧妙ですよね?へへ
argmentsと真伝の形式パラメータは一致していることを説明します.
例えば、あなたは関数にparamというパラメータを伝えました.そしてこのパラメータだけがあれば、paramとargments[0]はこのパラメータ値の参照です.
その中の一つの値を変えるということは、両者のすべての値を変えるということです.
機能 change
(param
)
{
//たとえば私が送ったparamはsimaopigです.それではalertはsimaopigです.
//何も伝えなかったらalert undefined
alert
(param
)
;
//argments[0]でこのパラメータの値を変えました.
アーグメンント
[
0
」
を選択します.
xiaoxiao
;
//間違いなく、この値はxiaoxiao ziになりました.
alert
(param
)
;
)
argmentsのcalee属性:
argmentsのcalee属性は、現在実行中の関数を参照するために使用されます.これは、名前のない関数呼び出し自体にとって非常に有利です.
前のページで関数の直接量で定義した関数で再帰関数を実現したことを覚えていますか?
その中で、関数の直接量を関数名として説明します.このように再帰を実現することは、自分を呼び出すのに便利です.
今はargmentsのこのcaleeで簡単に実現できます.
//関数で直接量を量って、argments.callee属性で再帰関数を実現します.
var レスリング
を選択します.
機能
(x)
)
{
if
(x)
<=1
)
return
1
;
return x
*argments.
calee
(x)
-1
)
;
)
;
最後にみなさんに注意したいのですが、このargmentsがこんなに強い以上、変数の名前はargmentsにしないでください.実はargmentsはjavascriptの保留文字の一つです.うん
//----------------------------------------------
javascript関数の体内では、argmentsは配列のように、length属性があり、関数に伝えるパラメータの個数を表すことができます.
一つの形式パラメータを参照すると、パラメータ名を使用しても良いし、argments[]配列形式を使用しても良いし、ここでargments[0]は最初のパラメータを表しています.
だから、javascriptの中でAgmentsオブジェクトは関数の実際のパラメータです.次に、私達は一緒にこの不思議な国に入ります.argments.length属性:
jsは主動的にあなたのためにあなたが一体どれだけのパラメーターを関数に伝えたかを判断することはできません.もしあなたがマルチパスしたら、余分な部分は使われません.
だから、私たちはargmentsのlength属性を使って、関数を呼び出す時に正しい数の実際のパラメータを使っているかどうかを検出できます.javascriptはあなたのためにこれらのことをしないからです.
機能 f
(x)
を選択します
を選択します
)
{
//まず伝達パラメータの数が正しいか確認します.
if
(argments.
length
!= 3
)
{
throw
new エロエロ
(
「function f caled with」
+ アーグメンント.
length
+
"argments,but it not 3 argments."
)
;
)
//下で本当の関数を実行します.
)
argmentsはまた、関数のために任意の数の実際のパラメータを伝える可能性を提供してくれます.
例えば、あなたが私に送った数字の大きさを判断したいです.一番大きいのを取り出してください.そうです.どのぐらいのパラメーターを送ってもいいです.しかし、前提はあなたが数字を送るので、関数の内部で判断するのがおっくうです.はあ
機能 max
(
)
{
//前の日記によると、これはJavaScriptの中で一番小さい数字です.
var m
を選択します. Number.
NEGATIVE_INFINITY
;
for
(
var i
を選択します.
0
; i
<> アーグメンント.
length
; i
++
)
{
//どのパラメータがmより大きいとmはこのパラメータの値になります.
if
(argments
[i]
」
> m
)
m
を選択します. アーグメンント
[i]
」
;
)
return m
;
)
どうですか?この方法は巧妙ですよね?へへ
argmentsと真伝の形式パラメータは一致していることを説明します.
例えば、あなたは関数にparamというパラメータを伝えました.そしてこのパラメータだけがあれば、paramとargments[0]はこのパラメータ値の参照です.
その中の一つの値を変えるということは、両者のすべての値を変えるということです.
機能 change
(param
)
{
//たとえば私が送ったparamはsimaopigです.それではalertはsimaopigです.
//何も伝えなかったらalert undefined
alert
(param
)
;
//argments[0]でこのパラメータの値を変えました.
アーグメンント
[
0
」
を選択します.
xiaoxiao
;
//間違いなく、この値はxiaoxiao ziになりました.
alert
(param
)
;
)
argmentsのcalee属性:
argmentsのcalee属性は、現在実行中の関数を参照するために使用されます.これは、名前のない関数呼び出し自体にとって非常に有利です.
前のページで関数の直接量で定義した関数で再帰関数を実現したことを覚えていますか?
その中で、関数の直接量を関数名として説明します.このように再帰を実現することは、自分を呼び出すのに便利です.
今はargmentsのこのcaleeで簡単に実現できます.
//関数で直接量を量って、argments.callee属性で再帰関数を実現します.
var レスリング
を選択します.
機能
(x)
)
{
if
(x)
<=1
)
return
1
;
return x
*argments.
calee
(x)
-1
)
;
)
;
最後にみなさんに注意したいのですが、このargmentsがこんなに強い以上、変数の名前はargmentsにしないでください.実はargmentsはjavascriptの保留文字の一つです.うん
//----------------------------------------------
!function fc(a) {
//arguments[0] = 100;
alert(a); // 1
}(1);
!function fc(a) {
arguments[0] = 100;
alert(a); // 100
}(1);