+ JavaScript の質問用スレッド vol.124 + [転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
JavaScript を自ら学ぶ人のための質問スレッドです。
>>2-4のテンプレを読んだ上で質問してください。
■質問を書く上で
(1) 煽り、コード制作依頼等、人を不快にさせる投稿はご遠慮下さい。公序良俗を守った応対を心がけてください。
(2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。
(ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など)
(3) 質問者及び議論を行う人はメール欄を空欄にし、名前にレス番を入れることを強く推奨します。回答者はなりすましを判断できませんので、なりすましが現れても自己責任となります。
(4) 常に自発的に調べる心構えを持ってください。
具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。
わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。
(5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。
(6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。
※必ず「問題の事象が再現されること」を確認してください。
必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。
(7) サンプルコードに HTML が含まれる場合は http://validator.w3.org/ で [Check] してみてください。
(8) 質問を具体的かつ詳細に書くと回答を得られやすいです。>>2の質問テンプレートを活用してみてください。
(9) 時にはあなたが望む「答え」だけでなく、「意見」などが寄せられる場合もあります。
+ JavaScript の質問用スレッド vol.123 +
http://peace.2ch.net/test/read.cgi/hp/1423915644/
(ライブラリ禁止条項は、多数の意見によって廃止されました。ライブラリの質問もOKです) >>393
たいした工夫もなく書くとするとこんな感じかな。
これはjQueryを使ったやりかた
https://jsfiddle.net/8cLk4adb/
<img id="gazou" src="https://placehold.jp/12/c42d3f/ffffff/50x50.png">
<div id="result"></div>
for (let i = 0; i < 4; i++) {
$("#gazou").clone().removeAttr('id').appendTo("#result");
}
要は要素の複製をしてないのが悪いということ あ、説明忘れてた。removeAttrしてるのは、
同じIDを複数作ることは許されてないから >>394
すみません。下記が抜けていました。
dA = document.getElementById("dispArea");
<div id="disprArea"></div>
>>396
要素の複製は知りませんでした。
無事解決しました。
ありがとうございます。
レスして頂いたお二方、ありがとうございました。 httpモジュールやrouterモジュールを使って
node.jsでちょっとしたサーバを作っています
routerはexpressの一部を切り出したモジュールで、
express同様、
router.use(bodyParser.json());
みたいな感じにミドルウェアを登録します
リクエストボディ関連で良く分からない挙動が出ているので、
bodyParserで処理する前のリクエストボディを確認したいのですが、
どうやればいいのでしょうか? httpのrequestハンドラの中にブレークポイントを設定して
requestオブジェクトを見てみても、それらしいものがないものが見当たりません
socketとかconnectionを持っているので、
これを使ってストリームを読んだりするのでしょうか? >>402の件ですが
http://m12i.hatenablog.com/entry/2016/11/19/180937
ここを読んで分かったのですが、
requestオブジェクト自体がReadableストリームでした
なのでdataハンドラとendハンドラを使ってデータを読み込める
それがリクエストボディ、ということなんですね >>404
クライアントサイドJavaScript=ブラウザの上で動くJavaScript
サーバサイドJavaScript=OSの上で動くJavaScript
という意味です
Windowsやmacのような一般的なパソコンがあるなら、node.jsも使えますよ 俺も中学でJS知ったときはこんな感じで下手くそな自演して悦に入ってたわ
自尊心は高くアピールしたいけど臆病なんだよな、分かるよ >>407
じゃあ、あなたはその頃と全く成長してないですね
恥を知りなさい node.js界ではrequestにreq、responseにres
という変数名を当てていることが多いようですが
自動補完が発達した今では、
セコい省略をするよりも分かりやすい変数名を付ける方を優先すべき、
と思っていたのでモヤモヤします
reqやresを使う合理的な理由はあるのでしょうか? >>409
ようするに可読性が十分であるかが問題の焦点だよ
長過ぎる名前っていうのも実は場合によっては読みにくい
ローカル変数のような使い捨て変数に長過ぎる名前をつけるなんてありえないから
まず短い名前が許されるのは、その変数のスコープが小さい場合
俺のルールでは一文字の変数に略して良いのは、その変数が一行のスコープしか存在しない場合だな
例えば requests.map(r => foo(r)) みたいな感じな。
なぜ一文字でいいかというと、それはその一行を見るだけでrが何を意味するのかわかるからだ。
reqやresは関数やブロックの中でだけ使われる変数ならOKだ。
大体予想がつき、それを確定するにはその前後数行を読めばいいだけ
だから関数やブロックと言っても短い行数(どんなに長くても30行程度)である必要がある
だけど普通はその程度で書く。書かなければいけないレベル。だから短くても許される
省略してはいけないのは、略称を見ても予想がつかないもの。
この時予想がつくかどうかは、その人のバックグラウンドできまるわけだが
少なくともプログラミングをしているのだからソフトウェア用語は略しても
(スコープが小さいことが前提だが)予想がつく
あとはその業務で誰もがそう略しているといえるようなものだけだなそうでないものは略してはいけない
> 自動補完が発達した今では、
自動補完は「書く時」にサポートしてくれるものであって「読む時」にサポートしてくれるものじゃない。
ぶっちゃけ書く時間というのは無視できる。読むときのほうが何度も読むし時間がかかる
その時コードが読めればそれで十分なんだよ。だから予想がつく略であればOK
そのためにも数十行程度のスコープであることが前提
名前を省略するなっていうのは、とても大きなスコープの場合の話
技術力が高い人ほど、関数の行数は短くなり、わかりやすくなり、略した変数を使う権利が与えられるw
手段と目的を履き違えたらダメだよ。略がいけないのは読んだ人がわかりにくいからで
別にわかりにくくないのであれば、略してOK >>410
長々と乙だが、お前らゆとりの問題はそこなんだよ。
お前らがそんなレスをしている限り、お前らが居るスレが良スレになることはない。
誰を助けるべきか、よく考えろ。
パヨクがグダグダよく言っているが、あれは単なる論点のすり替えだ。騙されてはいけない。
韓国人やパヨクが嫌われているのは、迷惑行為をしているからでしかない。差別ではなく、区別だ。
お前はこのnode女を飼うつもりなのか?それでスレが良くなるとでも思っているのか?
お花畑すぎるのも、周りの人には大迷惑だということに気づけ。
ここら辺に関してゆとりは全く傍若無人だから嫌われるし、
俺は「ゆとりも殺さないといけない」と結論づけてる。
もっとも、被害を被るのは結局お前らであり、
また、自覚してないようだが、既にそうなっているんだがな。 >>410
ありがとうございます
resとかreqが使われるのは、コールバックの仮引数です
ローカル変数なので
あえて省略して刹那感を出しているのかもしれませんね
node.jsはモジュールを読み込む変数に一般名詞を使うことが多いので
一般名詞を使うとモジュールっぽく見えてしまう、ということもありそうです
>>411
何を言っているんですか??
馬鹿な人はだいたいネトウヨですね
しかしJavaScriptスレにまでネトウヨが湧くとは・・(呆れ >>411
いつも通りお前JavaScriptの話をしてないな >>410
そうそう、名前よりスコープを短く保つの大事 スコープは短く。それができたなら変数名を短くする権利が与えられる
が正解な ゴミクズの質問は
1 ゴミクズ以外の誰でも検索すれば一発でわかる
2 正答が存在しないことがわかりきっている
1はローカルルールにやめろとかいてあるし
2はこんな場末の掲示板でやっても見せ合いオナニーにしかならん
本当にゴミクズ >>412-413
まあお前らが居る限り、
俺がどんだけ努力しても(俺流のやり方では)スレが正常化しないと分かってしまったからね。
俺は田んぼに肥料をやってたくさん米をならすことは出来るが、
それが全部お前らイナゴのエサになってしまうだけだと分かったら、
先にイナゴを殺すしかないだろ。だから、俺は
韓国人死ね
ゆとり死ね
な訳だ。ただし俺が老害化していて、俺の考えが間違っている可能性
(ゆとり流の別解法が存在する可能性)も勿論残っているから、俺はとりあえず傍観モードな訳だ。
お前らの回答には間違いも散見されるが、それについて指摘するつもりもない。
お前らのやり方で正常化するようなら、お前らの勝ちでいいし、俺ら老害は去るべきではある。
ただ本来は、お前らがルールだというのなら、お前らが新たに立てた別スレでやるのが筋であって、
旧来のスレを乗っ取ってやっているお前らにはどだい無理だというのも自明なんだが。
(お前らはお前らだけで人を集めるだけの魅力/能力がない、と自己証明している。
本当に良いスレが出来れば自然と人はそっちに流れるものでしかないんだが)
他言語スレ見て見ろ。JavaScriptのスレが如何に酷いかはよく分かる。
そして、2chのスレはどこでも同じような雰囲気だ。
それは「そういう物しかできないから」であり、また、「そうじゃないと持続しない」からなんだよ。
2chはずっとシステムを変えてない。
その中でお前らみたいに色々努力する奴も必ずいるし、俺も俺なりに抗ってみた時期もある。
でも結局、落ち着いているところに落ち着いている、というのが今の2chだ。
それ以上の物を作るのは相当に難しい。
今なぜこうなっているのかすら理解できないお前らみたいな馬鹿にはこれを凌駕するのは到底無理なわけだが、
まあそれでもお手並み拝見はするべき、だから傍観してる。
>>417の言うことは全く正解だ。
なぜ検索しないのかは俺にもさっぱり分からない。つか、検索した方が早いだろ。 >>412
要は、ある程度普及した略語は略語として扱おう、ぐらいに思っといたら良いと思うよ。
iって変数はだいたいループカウンタだなあ、ぐらい。 ふと思ったんですが、非同期関数の中から投げられた例外ってどうなるんでしょうか?
処理がtryブロックをとっくに抜けたタイミングで
コールバック関数の中から投げられた例外って、catchできないですよね・・? try {
setTimeout(()=>{
throw '!';
},1000);
}catch(e){
console.log('cought:'+e);
}
console.log('tryの外');
とやったら、やはりcatch出来ませんでした
catchする方法はないのでしょうか?
そもそも例外と非同期処理の間に相容れないものがある気がします
処理が失敗した時、
その失敗にどう対応するかは後で考えようという場合に、とりあえず例外を投げるようにしておく、
という方針がありますが
それが使えないということですよね? >>421
setTimeoutはどのオブジェクトに生えてるメソッドだと思う?
そうwindow。いつもは省略しているがwindow.setTimeoutが
正式なメソッド名
だからwindow自身にエラーをキャッチする方法がある
それが何かは俺の次のやつに書かせようw あと非同期処理にはpromiseを使う
promiseにはcatchする方法がある >>420-421
オライリーの「初めてのJavaScript 第3版」に書いてあるけど、
例外処理は、コールバック関数の内外とか、
コンテキストが異なるものには、対応できない
co, Koa のジェネレータ・ランナーを使えば、
例外処理を、同期的に書ける >>421
throwする代わりにreject()すれば取り合えずcatch出来る
https://jsfiddle.net/bvL9qwmn/ >>428
え? 何に対して理由を書いてほしいの?
書くけど? >>429
彼(>>424)がレスした相手を確認してみたら¿ >>430
確認してもわからないから、どれに対する理由がほしいのかって聞いてるんだが?
言えないなら、それまでってことでいいよ つまり、
韓国人死ね
だろ。つかマジで、最低限の会話が成立しないと無理だろ。 ご回答ありがとうございます
知らない言葉も出てきて、すぐには消化できないのでゆっくり見ていきます
ありがとうございました とりあえず、初めてのJavaScriptをぽちりました
「Brendan Eichはコンピュータサイエンスに関するしっかりとした知識をもっており、
とても洗練されたアイデアをJavaScriptに注ぎ込みました。
多くの点で時代の最先端を行くもので、
大多数の開発者がその素晴らしさに気づくには15年もの時間がかかりました。」
これは本当にそう思いますねぇ >>431
自分で何を書いたか分からないようじゃ
それまでってことでいいよ >>436
だから何も指摘されるようなことは書いてないって
それなのに指摘すると言うんだから、お前にはそれがどれかを
言う義務がある >>424の人は、文字通りの単なる荒らしだと思いますよ
JavaScriptにすらたいして興味ないんじゃないですか?
全くなければJavaScriptスレを覗きもしないので、少しは興味があるでしょうが >>436
分かるとは思うが、そいつは煽り抜きでガチのアスペだぞ。マジでこんな感じ。
> 心理学的に言えば、部分部分でサポートがないと、
> 細かい点は認知していないと言うことが明白ですね。
> http://fanblogs.jp/hasuraa/archive/261/0
こんなところで油売ってるのではなく、病院に行った方がいいと思うんだが。 👀
Rock54: Caution(BBR-MD5:842eac59f97f47c0d6fb1bed016df49c) 正しいことをしている人に「間違ってる!」とだけ言い放って
どこが?と聞いたら「自分で考えろ!」と言って
討論(?)に勝った気になってるんですよw マジレスすると、
>>416 で「が正解な」と言うのは理由なく「間違ってる!」と言っているのと同じでそこが突っ込まれてるんだと思うぞ
もしかすると書いた本人はその気がないのかも知れないが、そう受け取られてしまう書き方だというのを自覚した方がいいよ >>443
マジレスすると、
ガチアスペ ID:ML6lMJWk
Node糞女荒らし ID:rMheBEyi
以外は全員それ分かってるけどな。
現実として、このレベルで無駄に諍いが起きるほど日本語が不自由なやつは死ねでしかないだろ。
そして当人たちは君や俺が今何言ってるかも理解できないんだぜ。
だって俺のこの書き込みは事の発端のやり取りより難しいわけでさ。マジでどうしようもない。
韓国人死ね マジで
ただなあ、さすがにこのレベルのやり取りは、2chでもなかなかないんだがなあ。
JavaScriptだけ異常に馬鹿揃いなのは本当に不思議なんだが。 今Javascript勉強中の初心者です。、
HTML、cssもある程度読み書きいけるようになってきたのですが、
jQueryに手を出そうと考えています。
そこで質問なのですが、
実際の業務では、jQueryは使われるものなのでしょうか?
それとも実際の業務ではJavascriptはバニラのような状態で使用されるものなのでしょうか?
業務経験者の方がいらっしゃったら教えていただけたらと思います。 普通に使われるよ
常時使われるかと言うと勿論要件に依る >>446
ありがとうございます。
jQueryも使えるように取り組みます。
業務がVB.NET()なので、
Javascript楽しくて仕方ないです。
転職できるように頑張ろうと思います。 「初めてのJavaScript」を読んでいますが
配列を
['a',
'b',
'c',]
みたいに末尾要素の後ろにコンマを書く書き方って、今では許容されているのですね
これはPHPでは出来るのにJavaScriptでは出来ない書き方だと思っていましたが、
JavaScriptの仕様からすると本来出来るもので、
実装が仕様に追いついてきたとのこと。
時代は進歩しているものですね? 今では関数定義や呼び出しの引数でも末尾カンマ使えるよ
っていうか配列の末尾カンマ問題はただ古いIEがJScript実装だったってことで
IE9以降はオブジェクトも含めて問題ないでしょ >>449
昔のJavaScriptの仕様だと許されてなくてJSONはそれに準拠している。
許されるようになったのはES5あたりじゃなかったかな。 JavaScriptは配列に限って昔から末尾のカンマを許容していた
ECMAScript 3では、末尾のカンマは許容されていなかった
ECMAScript 5.1では、配列とオブジェクトの両方で末尾のカンマは許容される
ECMAScript 2017では、関数の引数の末尾のカンマが許容されるようになった ID:eKIgo3Je = ID:rMheBEyi = ID:uhJerKM5 = ID:QIqSykkT な。
まあお前らがその程度だからこのスレもこの程度なんだが。 ID:/arVeZ+Z = ID:ML6lMJWk = ID:iA9W3nMK >>455
最後は違うで?
あと別に隠しとらんで? javascriptで普通のアプリケーションを作るにはNode.jsで
作ればいいですか? 普通のアプリケーションとは
プログラムをテキストファイルにかいて
インタープリターに送ると
アプリケーションが始まるものです。 Nodeはどちらかと言うとバッチのイメージ
OS上で動く普通のアプリをJSで書きたいのならWinストアアプリとかの方向なんじゃないかな
もしくはWeb技術使いたいのならElectronとかから、単純なWebアプリまで沢山選択肢はある クロージャというのは、
周囲のスコープを保持している関数のことでも、
関数を「包み込んでいる」スコープのことでもなく、
スコープと関数をまるごと包み込んでいる目に見えない何かのことなのでしょうか?
今までは、周囲のスコープを保持している関数のことを、
スコープを閉じ込めたもの=クロージャ、だと思っていましたが
「初めてのJavaScript」を読むとどうも違うようです 関数=コードとして目に見える
スコープ=ブロックや関数という形で目に見える
クロージャ=目に見えない抽象的な概念
という感じでしょうか?
これはなかなか理解しにくいですよね
「初めてのJavaScript」は、とてもいい本、
おそらくJavaScript本の中で最良の部類の本ですが、
書名から連想するような初心者向けの本では全くないですね! あいかわらず、検索すらしないゴミクズ
スレ荒らしには構わないように 本来一回限りで消えてしまう関数スコープを
無名関数にそれへの参照を保持させることですぐには消えないものにする
という一種のテクニックです
技術的にはそんなに難解ではないのですが、
用語法が分かりにくいんですよね
クロージャって何のこと指して言ってるの?っていう。
>>465
ハーゲ >>467
荒らし死ね
韓国人死ね
てかマジググレカス var outFunc = function(){
var count = 0;
return function(){ return ++count; };
}();
console.log(outFunc()); // 1
console.log(outFunc()); // 2
クロージャは静的スコープ。簡易クラス
内側の関数から見て、スコープ外のcount を使っている。
一見、スコープの外側の環境を閉じ込めているように見えるが、
実際にはその変数をコピーしておらず、ただ参照しているだけなので要注意!
内側の関数を戻した、外側のoutFunc をクラスと見れば、
count がメンバー変数(プロパティ)で、内側の関数がメソッドになる。
メソッドでメンバー変数を更新すれば、更新後のメンバー変数が保持されるのは当たり前 初めてのJavaScript 第3版、オライリー、2017
これを読むには、数年以上の勉強が必要。
ES6(2015) の本だから、Babel で、ES5 に変換して実行する。
初心者は、ES3, ES5, ES6 の順番に勉強する方が良い
特に、ES6ではクラス構文もできて、
オブジェクト指向に近くなったから、難易度が急上昇した
漏れは、10言語は知っているけど、この本に苦戦中 >>466
>>469
荒らしに反応することもスレ荒らし
そんな事もわからないボケにふさわしく、理解不足なレスを返しているところは笑えるが
ここはネタスレじゃ無いので引っ込んでろ >>467
> ですから自分がまず質問スレですることは、あなたのような連中を追い出すことです
ハーゲとレスする事でした 大爆笑 >>467
ハーゲ
これで追い出せるのかな 大爆笑 >>469
ありがとうございます
たしかにふるまいはクラスに似ていますね
静的スコープというのはレキシカルスコープというやつですね
たまに本の中で見かけるけど、良く分からず、分からないままにしていた言葉です
いま検索したところ、「JavaScript Good Parts」の中に
「JavaScriptの関数は、(大部分は)レキシカルなスコープを持つファーストクラスオブジェクトである」
と言及がありました。しかしその後、「レキシカルなスコープ」については説明がない
こんな風に、ただ出てくるだけの言葉、という印象があり、
今まで流していたのですが、これを機に勉強したいと思います
ありがとうございました >>474の件ですが
レキシカルスコープを分からなかったというより
ダイナミックスコープを知らなかっただけでした
ダイナミックスコープはコードの実行時にコールスタックを辿って変数を決める方式で
関数の中でローカルとして宣言されていない変数を見つけると、
処理系はコールスタックを辿り、呼び出し元のスコープの中で変数を探す
それを変数が見つかるか、グローバルスコープに突き当たるまで繰り返す
そういうものが
ダイナミックスコープだというのですが、
そんなの見たことがありません
それもそのはずで、
現代のプログラミング言語のほとんどがレキシカルスコープを採用しているとのこと。
そしてレキシカルスコープはダイナミックではないスコープ、
つまり現代のほとんどのプログラマーが「スコープとはこういうものだ」
と考えているスコープです
つまり構文の包含関係によって変数が決められる方式です
構文の包含関係に基づくので、変数が解決されるのは構文解析時です
そんなわけで普段プログラムを書いていて、
レキシカルスコープとダイナミックスコープの違いを意識することはあまりなさそうですが
処理系の内部動作にまで視点を広げた時には、
興味深いトピックとして立ち上がってきそうですね >>474-475,469
まずは、ローカルルールなんか守らなくて良いとほざいてるゴミクズとそれにレスするカスを追い出そう
ハーゲ ダイナミックスコープというとLispでしか見たことねぇ ググれないブス >>475
朴訥おじさん >>470
ガチアスペ >>431
の3人で別スレ立てて、好きなようにやってみろ。
俺はそっちには行かないし、そこが繁盛するならそれでいいし。
お前らが駄目なのは、良い物をより良い物が倒す実力主義ではなく、
良い国に悪い韓国人がたかる背乗り主義だからなんだよ。
だから少しマシになってもすぐお前らによって潰されてしまう。
しかもお前らはそれを未だに自覚できてない。学習能力0だなマジで。
韓国人死ね
脱線するが、経団連もこの辺完全にお花畑老害になっている。
自分達の国を自分達で改善できないゴキブリ韓国人なんて呼んだ所で、
この国が良くなる筈もない。悪くなるに決まっている。
だから移民なんてそんなに簡単じゃない。
お前らがスレを上手く運営できると思っているのなら、
実際にお前らで別スレを立てて繁盛させ、結果的に人をそこに集め、旧来のスレを殺してみせろ。
これは実力主義であり、正しいスレの殺し方だ。
ゴキブリ韓国人流の背乗り主義はマジでやめろ。誰の為にもならない。 何か気持ち悪い人が棲息していますが昔からなんでしょうか?
質問者と回答者で力を合わせて浄化を目指しましょう >>479
死ねよブス
つか、お前は過去スレどころかこのスレすら全部読んでないのな ちなみに>>474のJavaScript Good Partsの箇所ですが
JavaScriptでJavaScriptを実装するという面白い試みを紹介している箇所だったので
その記事が載っている「ビューティフルコード」をぽちりました
少し読みましたが、これも良書のにおいがプンプンします
こういうセレンディピティが起きるのが質問スレの醍醐味ですね 静的スコープは、Ruby, Groovy では、{ }, block で作れる。
モジュール・クラスも、{ }で囲むだけで、スコープを作れる
でも、JS では、スコープの機能は、function にしたから、
スコープを作るために、functionをネストしなければならない。
モジュール・クラスのスコープを作る場合も、functionを使わなければならない
つまり、スコープと関数の概念を切り離せていない。
関数スコープだけなのは、Python と同じ
でも、Ruby, Groovy では、ネストしなくてよい
Rubyのblock(処理)を、オブジェクトとして持ち運ぶ場合は、
proc に変換して、どこでも実行できる。
つまり、第一級関数と同じ
JS みたいに、functionを使って、スコープを作るのは、ややこしいだけ >>432
あー、うん。数年前の知識だね。
今じゃ当てはまらないから、そのレスは無視するね
ゴミ、捨てるね JavaScriptの場合は
let func = () => console.log("ok");
func()
みたいにして実行できるけど、
Rubyだと、
func.call() みたいにしないといけないのがダサいんだよな
callってなんだよwww http://hamuhamu.hatenablog.jp/entry/2015/05/01/050530
> Rubyのメソッドは、変数への代入が出来ないので、第一級オブジェクトではない。
> 第一級オブジェクトではないから変数への代入が出来ないといったほうが正しいのかも。
>
> Rubyのメソッドをクロージャとして扱うには Proc や lambda を使います。
> 厳密に言うと Rubyにおいて Proc や lambda を扱ったものは、第一級オブジェクトではないらしい。 まあ漏れが言いたかったのは、JS のfunction を使う場合、
別に関数として呼び出すわけじゃない
多くの場合、スコープが欲しいだけだから、{ } で十分。
一々、function を使わされるのが、誤解を招く
言語に、関数スコープしか無いから >>486
何度も言わせるな。
JavaScriptは {} でスコープを作れる
調べもせずに反論するな まあ何でもかんでも{}で足りるというわけでもない
その点での即時関数の代わりにGoogleが推してるdo文は実際欲しい
O.oの二の舞いにならなければよいが 純粋関数を
1.同じ入力に対しては同じ出力を返す。
2.「副作用」をもたない。つまりプログラムの状態を変えない。
と「初めてのJavaScript」は説明します
そして関数外部にあった変数をクロージャに含んで、
スタティック変数のように使うようにしたことを、「副作用がなくなった」と言います
スタティック変数的な変数であっても
「プログラムの状態」には変わりがないのでは?
とも思うのですが、ここでいう「プログラムの状態」というのは、
関数の外の変数、という意味なのでしょうか?
またオブジェクトのメンバを変更するオブジェクトメソッドは
副作用があるのでしょうか?ないのでしょうか? またgoogle一発で回答に辿りつける質問をしてやがる
相当に知能が低いんだろうな
荒らすな ハーゲ >>490
またハゲた発想ですね〜
ツルッパゲです
ググったんですか?見つかったんですか?
それならそれをここに書けばいいのです
ググって見つかってはい終わりじゃないんですよ
情報は検討しなければならないのです
ネットに書かれてあればそれが事実だ、真実だ、とはならないんです
そのために質問スレがあるのです
分かりますね? >>489
定義は難しいというか、本来プログラミング言語のものではないので無理がある
例えば同じ引数を与えると必ず同じ値を返す関数と言ってもいいが、
内部的にMathを利用していて、それが書き換えられた場合まで突かれると厳しい
まあそこまで厳密ではなくて良いとすれば、反対にMathのような関数外の変数を書き換える
関数と言っても良いが、これでもループを形成すれば副作用的なものは作れる(モナド)
結局純粋関数かどうかなんて実用的なプログラミング言語には関係ない話で考えなくても良い
それよりかは、「外部変数を書き換えないようにする」とかもっと具体的な部分に注目したほうが良い >>491
普通に検索すれば一発でたどり着くしわかりきっている事なので普通のスレ住民には問題無い
ローカルルールなど知らんと宣言してるスレ荒らしの無能さに起因する事情など考えてやる必要はない
消えろ ハーゲ >>489
>>491
ググレブス
ゴキブリ韓国人死ね
本当にお前の投稿が他の人の役に立つと思っているのなら、結果で示せ。
新スレを立てて、お前の投稿を繰り返し、人が集まるかどうかやってみろ。
本当に良いスレなら自然と人が集まるものだ。
これすら試す勇気もないのだから、お前はゴキブリ韓国人と同レベルだよ。 >>489
クロージャ内の変数が更新されても、副作用はある。
状態が変化した
ただ、外部には副作用がないから、内部に限定した・封じ込めたという意味 ■ このスレッドは過去ログ倉庫に格納されています