var product,
slice = [].slice;
product = function() {
var i, len, num, nums, total;
nums = 1 <= arguments.length ? slice.call(arguments, 0) : [];
total = 1;
for (i = 0, len = nums.length; i < len; i++) {
num = nums[i];
totgal *= num;
}
return total;
};
alert(product(1, 2, 3));
このプログラムは結果的に3!を返すように思うのですが、
(1)slice = [].slice;
と
(2)slice.call(arguments, 0)
の意味がわからないでおります。
https://developer.mozilla.org/ja/docs/Web/JavaSc …
をみてみたものの、
(1)のように空の配列で、引数がないslice関数の呼び出しの意味がわからないんです。
(2)の第2引数の「0」の意味もわからないでおります。
結果的にはproduct(1,2,3)の引数「1,2,3」を配列に変換してnumsに代入しているように思えるのですが。。。
No.3ベストアンサー
- 回答日時:
たぶん,
slice = [].slice;
で Array.prototype.slice というメソッドを slice という名前の変数に入れて,
slice.call(arguments, 0)
でそのメソッドを呼び出してるんだと思う.
この場合 slice は 1回しか使っていないから slice を使って
slice.call(arguments, 0)
とする代わりに
[].slice.call(arguments, 0)
でもいいはず. 一瞬 [] に対して slice を実行しているように見えるけど call を使って this を差し替えているところがポイント.
実際問題としてこの程度のことでわざわざ配列にする必要があるんだろうかというところはあるけど.
ありがとうございます!理解できました
coffeescriptからjavascriptに変換されたコードなのでこういうまわりくどいコードになっているようです
ありがとうございました
こちらの回答なしにはNO3様のご回答のお話にもうつれなかったので感謝です
以前教えてgooでは次点つけられたような記憶があったのですが。。
先にNO3様をベストアンサーにしてしまいました
すみません、ありがとうございました
No.1
- 回答日時:
slice = [].slice;
var slice = Array.prototype.slice;
var int = Math.floor;
var n = int (4.5); // n = 4
slice.call(arguments, 0)
Array.prototype.slice.call (arguments, 0)
[1,2,3].slice (0)
arguments はオブジェクトなので配列化するために。
本来なら配列にしか使えない slice 関数だけど、
Array.prototype.slice.call として使うとオブジェクト型に使える
説明不足でごめん
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript ソースコードのいじる場所が分かりません。 1 2022/12/23 02:06
- JavaScript JAVASCRIPT 2 2022/04/15 15:10
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- Java Java・配列の問題です。 int 「」nums = new int「5」 ⤴︎ この5の事を言葉で 2 2023/06/21 22:30
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- 大学・短大 C言語線形リストの問題です 3 2022/12/22 00:45
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
二次元配列を使って順位をだす...
-
同じIDで定義した要素の配列を...
-
JavaScriptにおける[] とか :...
-
C#テキストボックスの文字を配...
-
jspからjavascriptの変数引継ぎ
-
助けてください‼︎ javascriptで...
-
undefinedを表示させない方法は...
-
React hooksが値を返して配列変...
-
javascript 変数名の連結をしたい
-
javascriptで行を抽出したいです。
-
二次元配列の全要素の全要素を...
-
配列を作って総当たりで距離を...
-
idを使わずにonclickで自身の要...
-
C#OpenCv V4にのエラーに関する...
-
google apps scriptの終了のさせ方
-
functionから別のfunctionを実...
-
GASでundefinedエラーが出ます
-
<a>タグのテキストを取得
-
Boolean型配列中のTrueの有無を...
-
【正規表現】【javascript】CR...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
同じIDで定義した要素の配列を...
-
C#テキストボックスの文字を配...
-
React hooksが値を返して配列変...
-
オブジェクトから任意のプロパ...
-
javascript 変数名の連結をしたい
-
jspからjavascriptの変数引継ぎ
-
配列の1要素を代入した変数を使...
-
JavaScriptにおける[] とか :...
-
フォーム入力値の重複チェック
-
javascriptで行を抽出したいです。
-
undefinedを表示させない方法は...
-
javascriptで2つのArrayの...
-
WSH(Jscript)でファイル一覧
-
JavaScriptでの動的な多次元配...
-
Perlの配列をJavaScriptに渡せ...
-
[JS] setAttributeで保存される...
-
JSONデータを50音順でソートしたい
-
二次元配列の全要素の全要素を...
-
javascriptを用いて作成された...
-
バナーのランダム表示(複数、...
おすすめ情報
slice.call(arguments, 0)
この「0」の意味がわからないんです。
そちらではおわかりでしょうか?
0番目からすべてをコピーする
→あ、そういう意味でしたか!理解できました。
slice = [].slice;
こちらがまだしっくりこなくて・・・
slice=[];
ではだめなものなのでしょうか・・・