質問: 1.sum.apply(this,arguments) は、apply メソッドを呼び出すオブジェクト sum を指します。これは、同じスコープ内で実行される callSum() と sum() を指します。arguments は、「sum1」を指します。 、和2」? 2. プロジェクト内の apply() と call() の適用値は何ですか?
上に書かれていることは本当に複雑です:)
質問者が何に迷っているか聞いてください1:
arguments は、関数に渡される引数に対応する配列のようなオブジェクトです。引数オブジェクトは、すべての関数で使用できるローカル変数です。引数オブジェクトを使用して、関数内で関数の引数を参照できます。
追記: this のポイントは、関数が定義された時点では決定できません。実際、this の最終ポイントは、それを呼び出すオブジェクトです
2. call と apply のアプリケーション値 (存在意味):
関数は、関数の実行時コンテキストを変更するために存在します。 それは、関数本体内で this のポインティングを変更することです「端的に言うと、a には xx メソッドがありますが、b にはありません。B は a にそれを借りることができます (これは単なる継承ではありませんか~)
呼び出しと適用の違い:
パラメータの受け取り方法が異なります。
次のように: call は連続パラメータを受け入れ、apply は配列パラメータを受け入れます。 A.call(this, a,b,c,d)A.apply(this, [a,b,c,d])
ポータル: http://www.jianshu.com/p/a7b1...
arguments は function の組み込み属性の 1 つで、関数配列オブジェクトを表します。つまり、callSum1 の引数は num1 と num2 を参照しますhttps://developer.mozilla.org...
apply と call の価値は、指定された関数内の this が特定のオブジェクトを指すようにできることです。たとえば、document.querySelectorAll() を使用して取得した dom は、実際には配列ではなく、配列のようなオブジェクトになります。配列メソッド、次のようになります
document.querySelectorAll()
apply と call の主な違いはパラメータの形式です。この質問については MDN を確認することをお勧めします。
1.sum.apply(this,arguments) は、apply メソッドを呼び出すオブジェクト sum を指します。これは、両方とも同じスコープ内で実行される callSum() と sum() を指します。 2. プロジェクト内の apply() と call() の適用値は何ですか?
1.sum.apply(this,arguments) は、apply メソッドを呼び出すオブジェクト sum を指します。これは、両方とも同じスコープ内で実行される callSum() と sum() を指します。
2. プロジェクト内の apply() と call() の適用値は何ですか?
1 つの実行結果については両方が返されます 20 20
20
sum.apply(this,arguments)は、sumを呼び出すためにapplyを使用することを指します。以下の引数は、配列のようなオブジェクトです。
sum.apply(this,arguments)
sum.apply(this,[num1, num2]) 上記と同様。
sum.apply(this,[num1, num2])
議論については、スクリーンショットを投稿してください。そうすれば、感覚的に理解できるかもしれません
2点目に対する答えは以下の通りです
わかりやすいです。たとえば、Ajax リクエストの成功コールバック中にこのポインタを変更するだけです
例えばvueを開発する際、アロー関数が無い場合はvar that = thisを使って一時的に保存する必要があります。 これを厳選できれば、このような問題は発生しません
var that = this
栗をください
arguments は、関数のパラメータリストを配列のようなオブジェクトの形式で保存します。
実際、ここからわかるように、スライスを実行するには、オブジェクトが通常に実行して結果を返すために length 正确的下标 を持つ必要があるだけです。
length
正确的下标
配列の多くのメソッドは配列のようなオブジェクトで使用できるため、多くの場合、配列のようなオブジェクトは実際に配列と見なすことができます。
配列のようにすることもできます
本当に配列のようなオブジェクト
次のような数学の部分関数に似ています:
機能f(x, y) = x + y如果令 y = k 那么可以得到偏函数 f(x, k) = x + k ( 或者这样可能更好理解: f(x, 4) = x + 4)
f(x, y) = x + y
y = k
f(x, k) = x + k
f(x, 4) = x + 4
Bind は通常、部分的な関数を実装するために使用されます。 ただし、apply、call、bind については集中的に議論する必要があります。
上記を実現するには apply を使用します logger は次のとおりです:
logger
高階関数とは、一般に、戻り値が関数であるか、パラメーターが関数である関数を指します。
setTimeout は良い例です。パラメータ (通常は関数) を受け取り、一定の遅延の後にそれを実行します。 しかし、これを渡した後、これは通常、グローバルオブジェクトウィンドウを指します。これを指定したい場合は、apply と binding を使用する必要があります。
setTimeout
add リーリー
add
最初の実行は関数を返します。add を数学的な意味で関数とみなすと、それは
が得られます。 f(x, y) = x + y 我们执行了一次 add(1) 得到 add1 其实就是令 x = 1
add(1)
add1
x = 1
f(1, y) = 1 + y y を 2 回目に実行すると、実際の値が得られ、結果は式を使用して計算できます。
f(1, y) = 1 + y
これは実際には段階的な消去プロセスです。
私は関数型プログラミングの初心者で、まだ本質を理解していません。カリー化の唯一の利点は
惰性求值 私は一晩中起きていて、SF を閲覧することしかできませんでした。 。 。 。
惰性求值
スコープを手動で設定します。 this
this
百度で検索したら分かります。
上に書かれていることは本当に複雑です:)
質問者が何に迷っているか聞いてください
リーリー1:
追記: this のポイントは、関数が定義された時点では決定できません。実際、this の最終ポイントは、それを呼び出すオブジェクトです
。2. call と apply のアプリケーション値 (存在意味):
」呼び出しと適用の違い:
次のように:
call は連続パラメータを受け入れ、apply は配列パラメータを受け入れます。
A.call(this, a,b,c,d)
A.apply(this, [a,b,c,d])
ポータル: http://www.jianshu.com/p/a7b1...
arguments は function の組み込み属性の 1 つで、関数配列オブジェクトを表します。つまり、callSum1 の引数は num1 と num2 を参照します
https://developer.mozilla.org...
apply と call の価値は、指定された関数内の this が特定のオブジェクトを指すようにできることです。たとえば、
document.querySelectorAll()
を使用して取得した dom は、実際には配列ではなく、配列のようなオブジェクトになります。配列メソッド、次のようになりますapply と call の主な違いはパラメータの形式です。この質問については MDN を確認することをお勧めします。
1 つの実行結果については両方が返されます
20
20
sum.apply(this,arguments)
は、sumを呼び出すためにapplyを使用することを指します。以下の引数は、配列のようなオブジェクトです。sum.apply(this,[num1, num2])
上記と同様。議論については、スクリーンショットを投稿してください。そうすれば、感覚的に理解できるかもしれません
2点目に対する答えは以下の通りです
これを厳選しました
わかりやすいです。たとえば、Ajax リクエストの成功コールバック中にこのポインタを変更するだけです
例えばvueを開発する際、アロー関数が無い場合は
var that = this
を使って一時的に保存する必要があります。 これを厳選できれば、このような問題は発生しません栗をください
リーリー配列のようなオブジェクトを真の配列に変換する
arguments は、関数のパラメータリストを配列のようなオブジェクトの形式で保存します。
リーリー実際、ここからわかるように、スライスを実行するには、オブジェクトが通常に実行して結果を返すために
length
正确的下标
を持つ必要があるだけです。配列の多くのメソッドは配列のようなオブジェクトで使用できるため、多くの場合、配列のようなオブジェクトは実際に配列と見なすことができます。
リーリー配列のようにすることもできます
リーリー本当に配列のようなオブジェクト
部分関数を実装する 部分関数
次のような数学の部分関数に似ています:
機能
f(x, y) = x + y
如果令
y = k
那么可以得到偏函数f(x, k) = x + k
( 或者这样可能更好理解:
f(x, 4) = x + 4
)Bind は通常、部分的な関数を実装するために使用されます。 ただし、apply、call、bind については集中的に議論する必要があります。
リーリー上記を実現するには apply を使用します
リーリーlogger
は次のとおりです:高階関数とカリー化
高階関数とは、一般に、戻り値が関数であるか、パラメーターが関数である関数を指します。
上記の logger2 はこれを実行し、関数を返しますsetTimeout
は良い例です。パラメータ (通常は関数) を受け取り、一定の遅延の後にそれを実行します。しかし、これを渡した後、これは通常、グローバルオブジェクトウィンドウを指します。これを指定したい場合は、apply と binding を使用する必要があります。
カリー化について、まず関数を見てみましょう
add
リーリーパラメータを 1 つずつ渡すことができる場合、2 番目のパラメータに渡されたときに結果が取得されます。 リーリー
最初の実行は関数を返します。add を数学的な意味で関数とみなすと、それは
なので、部分関数が得られます。
f(x, y) = x + y
我们执行了一次add(1)
得到add1
其实就是令x = 1
f(1, y) = 1 + y
y を 2 回目に実行すると、実際の値が得られ、結果は式を使用して計算できます。これは実際には段階的な消去プロセスです。
私は関数型プログラミングの初心者で、まだ本質を理解していません。カリー化の唯一の利点は
パラメータが十分に与えられるまで、今の操作は実行されないということです。惰性求值
私は一晩中起きていて、SF を閲覧することしかできませんでした。 。 。 。
スコープを手動で設定します。
this
百度で検索したら分かります。