+ 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です) >>387 どうみてもあなたこそが荒らしです 分かりますね? 荒らしは質問スレなら問答無用に質問者に偉そうにできると勘違いしているゴミなので 質問者と回答者で協力し、技術圧で追い出しましょう ひたすら技術的な話だけしていれば自然と消えて行きます >>380 スコープのどこに書くかで動作が若干違います グローバルスコープで定義するとwindowにマッピングされます function test1(){} window.test1(); //呼び出し可能 しかし、関数内で定義した場合はwindowにマッピングされません (function(){ function test2(){} window.test2(); // 未定義エラー })() >>380 の書き方からすると、この違いについて理解されていると思いますが、 スコープの最上位オブジェクトは存在しません(スクリプトからアクセスできない)ので、何かにマッピングされるということはありません 後者の状況でwindowから呼び出したい場合は window.test2 = function(){}; (Nodeでは global.test2 = function(){}; ) という形で定義する必要があります が、windowやglobaのプロパティ・メソッドとして定義することは グローバル変数と同じ扱いなので、あまりお勧めしません 普通、各オブジェクトを1つずつ、グローバル変数にはしない。 そうすると、グローバル変数の数が多すぎる モジュール(1つのファイル)全体で、1つのグローバル変数にする 韓国人とゆとりは殺せ この意味が理解されないうちはこのスレが機能することもないだろうさ >>389 おまえが荒らしだよ くっそ初心者の質問で悪いんですが、 指南してもらえると嬉しいです。 下記のコードで同じ画像を4つ横に並べようと思ってるんですが、並びません。 なんとなく理由は思い浮かぶんですが、 (getElementByIdで渡されたのは値ではなく、参照的扱い?) どう書けばかっこよく書けるのか分かりません。 かっこいいJavaScripterになりたいので厳しめに教えてください。 <img id="gazou" src="image/gazou.png" width="200" height="200"> var dispGazou= function(){ for(var i = 0; i < 4; i++){ var k = document.getElementById("gazou"); k.style.marginLeft = (parseFloat(k.width) * i) + "px"; dA.appendChild(k); } } >dA.appendChild(k); dA という変数が存在しない スタイルの設定など、DOM 操作なら、jQuery が簡単 それと、質問はこのスレよりも、web制作管理板のJS スレで聞いた方が良い。 向こうの板の方が、人が多いから >>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は {} でスコープを作れる 調べもせずに反論するな ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる