のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,644,876人
昨日:no data人
今日:
最近の注目
人気の最安値情報

元スレ+ JavaScript の質問用スレッド vol.136 +

JavaScript覧 / PC版 /
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter

251 = :

>>250
そもそも何故同じにしたいのか
全部WebAudioAPIで処理すればいいじゃない

252 = :

Bがジェネレーターとして重い処理を書かないほうがいいのかと聞いてるのなら
毎回評価されるという解になるな

253 = :

いやジェネレータからイテレータ取り出してんのは最初だけだろ。
前回のyieldから次のyieldまでの処理は当然毎回走るが、それは当たり前じゃん。毎回走ってほしい部分が走ってほしくないってどんな状況よ

254 = :

for (let i of [1, 2, 3]) {console.log(i)}
の結果が1 2 3になるか1 1 1になるかを自分で確かめることすら車輪の再発明()とか言ってやりたがらないとかクズ過ぎる。
質問回答のコミュニケーションコストの方がよっぽど高くつくと思うのだが。

255 = :

確かめるなら
for(let i of hoge()){
}

function hoge(){
console.log('hoge')
return [1, 2, 3]
}

じゃない?

256 = :

>>255
うむ。>>254は罵っといて自分が理解してないという最高級のダサさ。

257 = :

>>253
当たり前とも言えるがそこは隠蔽されてもいるんだからさ

260 = :

質問者がlet使ってるからでしょ
エラーでもないのに関係ないとこ変えると回答の本質がぼやける

262 = :

>>260
確かにそうだな、すまん

263 = :

むしろなんでここでconst置けるような仕様にしたのか委員会を問い詰めたい。
ループ毎に値が変わる変数をconst宣言できるとかw
for-ofの()内はconst禁止でよかった。var/letなら直感に反しない。
トップレベルでは…
const A = 1;
A = 2; // エラー
なのにfor-ofでは…
for (const A of [1, 2]) {
console.log(A);
}
1
2 // for-ofちゃんナニ勝手にconst改変してくれちゃってんの??自分のスコープだからってやりたい放題か!?こんな無法が許されていいのか!!

264 = :

え?マジで言ってる?
for-of のlet/constはループ毎に毎回宣言してるのと同じじゃん
constによる最適化も期待できるんじゃないの

265 = :

かいへん……?

266 = :

>>263
const以前に、ブロックスコープの挙動は理解してないような

for (let i = 0; i < 4; i++)
document.addEventListener('click', e => console.log(i), false);

267 = :

>>264
毎回宣言ってどういう事?
一回だけじゃないの?

constで宣言すれば最適化で早いのは分かる

268 = :

細けーことで悩むな

269 = :

>>267
宣言は1回だが、ブロックスコープはループ毎に発生してる
>>266の挙動を確認すれば分かる

270 = :

違う。ブロックスコープが毎回発生するのは当たり前でそれだけでは説明できない。
それとは別に初期化句の変数宣言は特別扱いされる。

271 = :

いやうまいことなってんだろうけどさ、
せいぜい>>264みたいな理解になるわけよパッと見。
const A = 1
const A = 2 // エラー
なのにfor ofのカッコの中に書くのはなんで許されるのって。
for (const A of [1, 2]) {
console.log(A);
}

{
const iter = [1, 2][Symbol.iterator]()
while (true) {
const {value: A, done} = iter.next()
if (done) break;
console.log(A)
}
}
のような動作になるだなんてfor of構文の見てくれからは推測不可能だろ。
for (const A of [1, 2])の字面だけ見たらループごとにAに1、2と代入されるように見える。
というか明らかにそう見えるような構文にしてる。
そう見えるようにしたいんだったらその場所ではconst禁止にしとけって話。

272 = :

俺も似たようなことを思ったことがある

for(const i = 0; i < a.length; i++)

はエラーになるんだよな。

273 = :

初学者が横から疑問が湧いたのですが

逆にどうしてfor-ofではlet Aじゃなくてconst Aを使うべきだと言えるのか、良く分からないです
だってループ自体の目的がAを改変することだったらletかvarにするしかないですよね?
それともfor-ofではAに渡されるのはBの一部の実体ではなくコピーなんですか?
(Aを書き換えてもBには反映されない)
だとしたらとんでもなく用途が限られるように思うのですが。

274 = :

×Aを改変
○Aを加工

と言ったほうが適切でしたかね

275 = :

ミューテート

276 = :

.valueでinputのテキストボックス内に代入するとsubmitボタン押しても無反応になります
手動でキーボードから代入すると問題ないのですが何が原因なのでしょうか

277 = :

エラーくらい貼れ

278 = :

強いて言うと、エラーは無反応です
コンソール開いてconsoleとnetworkみてもウンともすんともです

279 = :

自己解決です>>276
エラーをあらためて探っていると
コンソールの各エラー項目の表示非表示チェックボックスが乱れていました
で、全部表示するようにしたら
TypeError: X[g].exec is not a function
というエラーが出てきました
どうやらObject.prototypeをいじっていのがいけなかったようです
関数にしたらsubmitも反応してくれるようになりました

280 = :

>>272
そりゃ i++ で変更してるし
同じくforと名乗ってても~.forEach()に似た物と素直に考えられるかどうかかなぁ

>>273
jsでの代入や関数呼び出しと同じでAに入るものがプリミティブ型であればコピー、オブジェクト型であれば参照なので
for...of/for...inでletを使ったとしても変数Aに何かを代入してもBに反映されない
Aがオブジェクトならconstでもプロパティは変更できて参照元のオブジェクトにも反映される

perlやphpのような書き戻し可能なforeachの方がバグの温床になるような気がするけどね

281 = :

>>271
それいいな。
const forOf = (iterable, callback) => {
const iter = iterable[Symbol.iterator]()
for (let {value, done} = iter.next(); !done; {value, done} = iter.next()) callback(value)
}
Array.prototype.forEachと同じ感じで使える
forOf([1, 2], A => {
console.log(A)
})
1
2
forOf('ab', A => {
console.log(A)
})
"a"
"b"
ループの一時変数にletだconstだのムダな議論なくなるし。
まあ[...iterable].forEachでいいか…

283 = :

>>271
めっちゃ正論ティー
constの方がほんの少しパフォーマンス上がるとは言えほんの少しだし、
マイニングでもやらない限りconstで書く方がデメリットデカイ気がする

284 = :

>>271
ただ単に多くの言語の挙動に合わせただけ
その方がいろいろと都合がいいでしょ?

285 = :

>>281
これで十分なものをなぜわざわざfor(const/let/var item of iterable)とか言うクソ構文を作ったのか
for(const item of iterable)と書かれて仕様知らないやつが初見でitemがループ毎に違う値入ってるとは夢にも思わないだろ。

286 = :

お前らが何を言ってんのか理解できん
for-ofでのletとconstはまったく違うし、どっちも必要

288 = :

>>284につきるとしか

289 = :

>>286
お前こそなに言ってんだ。for ofでletは不要。
let B = [1, 2]
for (const A of B) {
A = 6
console.log(A);
}
//=> エラー

let B = [1, 2]
for (let A of B) {
A = 6
console.log(A);
}
//=> 6 6
console.log(B)
//=> [1, 2]

290 = :

>>289
まあconstのほうがお行儀がいいしlet使うことはないかも
ところで君はまだfor-ofの構文についてわかってないようだね

291 = :

自己紹介乙。

292 = :

>>289
間違いを防止するって意味なら結構アリだね
A==6と間違えてのA=6とか

293 = :

他の話題くれ

294 = :

初心者でjs勉強終わった人がフロントのフレームワークで何からやった方がいいかの議論

295 = :

jsのフレームワークって小回り効かないのがなぁ
jQuery辺りのライブラリで十分、というか生jsしっかり覚えたほうがつぶしが利いて良い

296 = :

jqueryやったことない頃
生jsだけはしっかり把握してたから、実装は出来ないものの人のコードは読めたわ
まぁ他の言語も同じだけどね

297 = :

生js…ゴクリ

298 = :

毎日生js突っつきマワしてます

300 = :

vue.jsは?


←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript一覧へ
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

類似してるかもしれないスレッド


トップメニューへ / →のくす牧場書庫について