[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2ch.scのread.cgiへ]
Update time : 02/24 16:40 / Filesize : 334 KB / Number-of Response : 1026
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん mailto:sage [2021/11/10(水) 15:24:24.80 ID:jxD2VXPG0.net]
JavaScript を自ら学ぶ人のための質問スレッドです。
>>2-6のテンプレを読んだ上で質問してください。次スレは>>950>>2のテンプレ案(本スレで改善案があれば考慮)を元に立ててください

■質問を書く上で
(1) 煽り、コード制作依頼等、人を不快にさせる投稿はご遠慮下さい。公序良俗を守った応対を心がけてください。
(2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。
  (ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など)
(3) 質問者及び議論を行う人はメール欄を空欄にし、名前にレス番を入れることを強く推奨します。回答者はなりすましを判断できませんので、なりすましが現れても自己責任となります。
(4) 常に自発的に調べる心構えを持ってください。
  具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。
  わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。
(5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。
(6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。
  ※必ず「問題の事象が再現されること」を確認してください。
   必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。
(7) サンプルコードに HTML が含まれる場合は validator.w3.org/ で [Check] してみてください。
(8) 質問を具体的かつ詳細に書くと回答を得られやすいです。>>2の質問テンプレートを活用してみてください。
(9) ライブラリ関連の質問は禁止です。関連スレにあるライブラリ質問スレで質問して下さい。
(10) 時にはあなたが望む「答え」だけでなく、「意見」などが寄せられる場合もあります。

※前スレ
+ JavaScript の質問用スレッド vol.123 +
https://mevius.5ch.net/test/read.cgi/tech/1491143438/
VIPQ2_EXTDAT: checked:vvvvvv:1000:512:: EXT was configured

2 名前:デフォルトの名無しさん mailto:sage [2021/11/10(水) 15:26:36.49 ID:jxD2VXPG0.net]
■質問テンプレート
【環境】OS, ブラウザをバージョンと共に記入してください。(ex: IE8, Firefox4)
【何をしたのか】何をしたら問題の現象が発生するのか。再現手順を具体的に書いてください。
【エラーメッセージ】エラーメッセージがあれば正確に書き写してください。(Windows なら「コピット」を活用)
【期待する結果】最終的にどういう結果を望んでいるのか、を書いてください。
【サンプルコード】現象を再現可能な最小限のコードを書いてください。
 1レスに収まらないならコード投稿サイトを利用してください。
 jsdo.it/ jsbin.com/ jsfiddle.net/ ideone.com/

■過去スレ全集
www2.atpages.jp/mirror/2ch/javascript/
usamimi.info/~mirrorhenkan/2ch/javascript/ (閲覧のみ)

■テンプレ案
https://fiddle.jshell.net/6018r9tu/1/show/light/

3 名前:デフォルトの名無しさん mailto:sage [2021/11/10(水) 15:46:52.81 ID:qwlO4mThM.net]
前スレ998の質問だけど
一般的にはc2が返してるような関数のことをクロージャと呼ぶことが多いが
JavaScriptの関数は全部クロージャなのでc2自体もクロージャ

4 名前:デフォルトの名無しさん mailto:sage [2021/11/10(水) 16:02:48.18 ID:ABhSQgxq0.net]
なるほど

5 名前:デフォルトの名無しさん mailto:sage [2021/11/10(水) 17:50:22.23 ID:KxrU4/8D0.net]
>>998
追記です

3つの要素を持つオブジェクトセットを利用して、
関数内のクローズ状態を実現する、ということ意味して
そのセットをクロージャーと呼んでいるのだという理解でいかがでしょう?

6 名前:デフォルトの名無しさん mailto:sage [2021/11/10(水) 18:59:16.59 ID:l7XWnHd40.net]
過去スレみれねー

7 名前:デフォルトの名無しさん mailto:sage [2021/11/11(木) 11:19:40.42 ID:FWyFKZol0.net]
前スレで誤字があったので訂正と
クロージャーに関してわかりやすく説明しときます
closerは誤りでclouserでした

8 名前:デフォルトの名無しさん mailto:sage [2021/11/11(木) 11:24:24.80 ID:vTNkP19HM.net]
末尾セミコロンはどうしたらいいですか?

9 名前:デフォルトの名無しさん mailto:sage [2021/11/11(木) 11:47:50.28 ID:FWyFKZol0.net]
【クロージャー】
クロージャーはJSの関数に下記の仕組みを持たせるための要素のセットです
・関数内部をクローズにする(外部から直接アクセスできない)
・関数からは外部のプロパティにアクセスできる

この仕組みを作るものがクロージャーです
クロージャーの要素は、おおざっぱに関数自身、関数内情報、関数外部を参照するポインタで、
この要素のセットをクロージャーと呼びます


【外部ポインタの働きと内部情報の動きの確認】
<サンプルコード>
function f1(){ let c=0;return c++; }
function f2(){ let c=0;return ()=>{let s=0;return [c++,s++];} }

let f3=f2() ;

1 f1() ;f1() ;console.log(f1());
2 f2()();f2()();console.log(f2()());
3 f3() ;f3() ;console.log(f3());

<結果出力>
1 c:0
2 c:0 s:0
3 c:2 s:0

ここで外部への参照ポインタをouterとします
f1のクロージャーは、{関数f1 return c}{変数c}{outer(global}
f2のクロージャーは、{関数f2 return function}{変数c}{outer(global}
f2のアローの場合、 {無名  return [c,s]}{変数s}{outer(f2)}

10 名前:デフォルトの名無しさん mailto:sage [2021/11/11(木) 11:48:17.36 ID:FWyFKZol0.net]
コード1では、f1を2回呼びますが、関数呼び出し1回につき、1つの(別々の)クロージャーが生成されます
同じ変数名のcであっても、別物のcとなります
ですから、cはインクリメントされずに0となります

コード2ではf2から戻されるアロー関数を複数回呼び出しますが
関数の呼び出し1回につき、別々のクロージャーが生成されますので
上記と同じようにcは0になります

コード3では、f2から戻されるアロー関数を変数f3に代入し、それを複数回呼び出します
呼び出しのたびに別々のクロージャーが生成されますが
外部への参照は、outer(f2)なので、同じcを参照していますので
複数回呼び出すとcをインクリメントします
一方でアロー関数内の変数sは、コード1や2の説明と同じでインクリメントされません



11 名前:デフォルトの名無しさん mailto:sage [2021/11/11(木) 11:48:37.71 ID:FWyFKZol0.net]
【関数はクロージャーか?】
クロージャーは関数ではありませんし
関数はクロージャーではありません

関数内をクローズにし、外部参照を持たせる、という仕組みをつくるための
関数、内部情報、外部参照ポインタのセットがクロージャーです

【言語は多数者が正しい】
f2で戻される無名関数をクロージャーと呼ぶ人がいるのは
クロージャーの説明のために多用されていることで
無名関数をクロージャーと誤解してしまったり

f1が外部からクローズ状態なので、f1がクロージャーなんだと
そう理解してる人が多かったりしています

クロージャーという言語の用法に関して
何が正しいのかは、それぞれの立場を主張する人数によって
決定することが正しいのかもしれません

以上で訂正とまとめを終わります

12 名前:デフォルトの名無しさん mailto:sage [2021/11/11(木) 12:08:29.83 ID:FWyFKZol0.net]
>>8
javascript.infoでは
[ ]の前にセミコロンは想定していないため、前段と次段のコードが連続することが説明されてます

console.log(1)
[...'string'].forEach(console.log)



console.log(1)[...'string'].forEach(console.log)

と同じ扱いで、1を出力したのち、エラーになります
[]を使うときに思い出してください

13 名前:デフォルトの名無しさん mailto:sage [2021/11/11(木) 13:44:12.02 ID:PJUcZthZ0.net]
>>7
closureでは?

14 名前:デフォルトの名無しさん mailto:sage [2021/11/11(木) 14:51:22.63 ID:69bvz9620.net]
スジャータ

15 名前:デフォルトの名無しさん mailto:sage [2021/11/11(木) 16:11:30.72 ID:+2WcRgNnM.net]
クロージャーに「関数内部をクローズにする」なんて意味はないよ

16 名前:デフォルトの名無しさん mailto:sage [2021/11/11(木) 16:24:36.04 ID:YbaQuGpg0.net]
JSのクロージャーってどういう意味なの?

17 名前:デフォルトの名無しさん mailto:sage [2021/11/11(木) 16:26:10.03 ID:YbaQuGpg0.net]
9の長い長い説明はまったくもって的外れ?

18 名前:デフォルトの名無しさん mailto:sage [2021/11/11(木) 18:44:36.77 ID:a2zl13Hx0.net]
ふーん、なるほどねぇ

19 名前:デフォルトの名無しさん mailto:sage [2021/11/11(木) 19:03:41.76 ID:a2zl13Hx0.net]
||クロージャーは、組み合わされた(囲まれた)関数と、
||その周囲の状態(レキシカル環境)への参照の組み合わせです。
||言い換えれば、クロージャは内側の関数から外側の関数スコープへのアクセスを提供します。
||(MDN)

「関数の内から関数の外を参照できる、参照権限(参照できる状態(仕組み))」ということだろ!!!
これできめ!

20 名前:デフォルトの名無しさん mailto:sage [2021/11/11(木) 19:41:41.77 ID:CFwD9UgS0.net]
クロージャは関数閉包のこと
関数の中に関数が内包された状態を指す
外側の関数をエンクロージャと呼ぶが、クロージャ=関数ではない



21 名前:デフォルトの名無しさん mailto:sage [2021/11/11(木) 20:24:37.12 ID:eeb4OqXn0.net]
現在のスコープに変数が見つからなければ、どんどん外のスコープに変数を探しに行って
最終的にwindowまで探しに行ってくれる機能のことをクロージャと呼ぶ

かな?

22 名前:デフォルトの名無しさん mailto:sage [2021/11/11(木) 20:29:10.77 ID:CFwD9UgS0.net]
>>21
違う
それはスコープチェーン

23 名前:デフォルトの名無しさん mailto:sage [2021/11/11(木) 21:31:01.83 ID:P2a3zHOn0.net]
Promiseの状態(pending/fullfilled/rejected)って外から取得できないんだっけ?
探しても方法が見つからな。

24 名前:デフォルトの名無しさん mailto:sage [2021/11/11(木) 22:17:06.64 ID:9vb0JKHxM.net]
MDNの訳が微妙すぎると思ったら原文も同じだった

A closure is the combination of a function with references to its surrounding state.

A closure is a function bundled together with references to its surrounding state.
のどっちかにしたかったんだろう

25 名前:デフォルトの名無しさん mailto:sage [2021/11/11(木) 22:18:41.74 ID:a2zl13Hx0.net]
>>20
それは違う言語でしょ
JSはグローバルも一つの環境としてるから
グローバル内に宣言された関数も、囲まれた関数なんだよ
グローバルを関数と呼ぶのなら、それはそれかもなんだけど

26 名前:デフォルトの名無しさん mailto:sage [2021/11/11(木) 22:22:39.31 ID:a2zl13Hx0.net]
>>24
JSの設計のあいまいさを感じられるな

27 名前:デフォルトの名無しさん mailto:sage [2021/11/11(木) 22:44:02.25 ID:/xlmv84EM.net]
囲まれた関数ってのは微妙な原文と訳文で作られた言葉

ここの真ん中くらいにあるクロージャの定義を読むといい
https://javascript.info/closure

28 名前:デフォルトの名無しさん mailto:sage [2021/11/12(金) 07:15:12.60 ID:JgN/83EX0.net]
それを読んでも統一見解が得られづらいからこうなってるってわかる?

29 名前:デフォルトの名無しさん mailto:sage [2021/11/12(金) 07:25:05.37 ID:JgN/83EX0.net]
でもまぁ一連のやり取りで
環境レコードや外部参照チェーンやスコープの復習ができたということで
この部分に関しては、脱素人になったわけだ、おめでとー

30 名前:デフォルトの名無しさん [2021/11/14(日) 19:04:13.43 ID:y8V9oC250.net]
canvasでcontext.lineWidth=1;にして直線を描いても幅が1にならなくて2ピクセル分の太さになってしまいます
どうすれば幅1の直線が描けますか?



31 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 19:57:25.52 ID:oSBO5A5Z0.net]
>>25
言語仕様に言及するのなら、「ECMAScriptにクロージャは存在しない」が正解

> グローバル内に宣言された関数も、囲まれた関数なんだよ

そんな仕様はない
クロージャなんて概念は忘れて、変数、スコープ、関数の仕組みを覚える方が正しい理解に繋がる

32 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 20:00:15.95 ID:g8AzdeEc0.net]
>>30
整数座標はピクセル中央ではなくピクセル左上になるので0.5足す
めんどくさかったらcontext.translate(.5, .5)するとか

33 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 20:54:05.86 ID:oSBO5A5Z0.net]
>>28
クロージャで統一見解といえるのは「クロージャ=関数が入れ子になった状態」だけ
そこに機能的価値を見いだそうとするなら「クロージャという名の機能は存在しない」だ
機能的には別の機能で実装されていて、
関数を入れ子にした結果、それらの機能が便利な状況を作り出しているに過ぎない
学習目的なら「クロージャ」は忘れた方がいい

34 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 21:16:07.13 ID:Ec4oDlx8M.net]
関数が入れ子かどうかなんて関係ないよ

理解してない人たち同士で"統一見解"を求めようとするからドツボに嵌ってる

35 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 21:27:55.45 ID:oSBO5A5Z0.net]
>>34
仕様にない単語に、統一見解を求めるのが間違いなんだろうな

36 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 21:47:51.05 ID:ybz8bu8o0.net]
とはいえ「クロージャ=関数が入れ子になった状態」って定義は明らかに間違いだろう。

37 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 21:57:27.13 ID:pXm3Ey2jM.net]
ECMAの仕様にはAbstruct Closure Specification Typeが定義されてるし、関数定義周りでclosureって言葉は繰り返し出てくるよ

まあでも仕様型みたいな大半の人が知らなくても困らないような詳細知識よりも
クロージャとは一般的にどういうものを指すのかという基礎的知識を身につけたほうがいい

38 名前:デフォルトの名無しさん mailto:sage [2021/11/14(日) 23:10:09.15 ID:oSBO5A5Z0.net]
>>37
一般解を示す公式文書を出せる?

ぶっちゃけ、言語が異なれば用語定義も変わると思ってるし、共通の用語なんてないと思ってる
複数言語習得者が勝手に共通認識を定義しているだけなのでは?

39 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 00:30:22.12 ID:gtEjBgCa0.net]
ワロスw

40 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 07:13:10.30 ID:slHpwqED0.net]
JSのクロージャーは
関数内のプロパティに、外部から直接アクセスできないが
関数内から外部への参照はチェーンしているという状態をいう

外部Lexicalへの参照を持たない関数型は
関数ではあるけどクロージャーにならない
入り子になっていても

もうクロージャはこれで終わり
クロージャーに貴重な人生を奪われるなよ?



41 名前:40 mailto:sage [2021/11/15(月) 07:21:28.04 ID:slHpwqED0.net]
状態ではなく仕組みがいいな
クロージャーはオブジェクトセットという表現が適してる例が散見されるみたいだし
必要なオブジェクトセットを使ってnativeでクロージャーを実現してるんだから
クロージャーは仕組み!これできめ!

42 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 07:45:40.57 ID:slHpwqED0.net]
>>37

var a=0;
let b=1;
let c='C';

function func(){
let c=2;
return [a,b,c];
}

func.a='A';

console.log(
[window.a,window.b,window.c],
[a,b,c],
func(),
[func().a,func().b,func().c],
[func.a,func.b,func.c]
);


この出力を理解するにはクロージャーの仕組みの理解は必要でない?

43 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 19:30:23.51 ID:rDFc2Y3T0.net]
>>40-41
あなたの見解は理解した
正しさの根拠が見つからないのでそれだけだが

44 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 21:15:21.66 ID:eCFTqC9o0.net]
すいません、下記のようにボタンを押した時の処理をあらかじめ一つずつJSで書いて書いてるんですが、
ボタンの種類と数が莫大な量になるとJSを書くのが大変になってきました

逆にクリックされた任意のボタンオブジェクトを変数に入れる方法ってあったりしますでしょうか
(ボタンがクリックされる→クリックされたボタンのclassやvalueやtextを調べて目的の処理、という順番に変更したい)

下記が現状のコードです


・html
<button class="BtnA" value="固有の番号">ボタンAタイプ</button>
<button class="BtnA" value="固有の番号">ボタンAタイプ</button>
<button class="BtnB" value="固有の番号">ボタンBタイプ</button>

・js
const BtnA = document.getElementsByClassName('BtnA');
for(i=0;BtnA.length>i;i++){
BtnA[i].addEventListener('click', () =>{
//ここに押された時の処理を書く
});
}
const BtnB = document.getElementsByClassName('BtnB');
以下BtnAのコードとほぼ同様

45 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 22:27:30.97 ID:slHpwqED0.net]
>>44
クラス数×value数×text種類数だけ処理数があるってことですか?

46 名前:デフォルトの名無しさん mailto:sage [2021/11/15(月) 22:58:29.48 ID:OfX77+Sf0.net]
class="BtnA BtnAll"
class="BtnB BtnAll"

みたいに、BtnAll で、すべてのボタンの処理をまとめ

47 名前:黷ホ?

JavaScript のスレは、この板ではなく、web制作管理板の方へ書き込んでください!
この板のスレは、荒らしが出た時に、緊急的に立てられたものだから
[]
[ここ壊れてます]

48 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 00:43:22.12 ID:Ca8LCMpZ0.net]
>>45
そのイメージに近いです

>>46
ある程度まとめた結果が
BtnA BtnB BtnCみたいなグループです。

了解です、Web製作管理板に移動させていただきます。

49 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 07:19:53.13 ID:L8BSEbG10.net]
>>44
event.currentTarget
event.target

50 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 13:14:21.44 ID:x6nbCzKN0.net]
>>44
処理数が多すぎて管理効率が悪くなってるってことかな?
ボタン数×(value数-1)×(str数-2)の数の処理があって
保守管理しづらいというのなら下記の考え方はどうでしょう?

変数buttonにはボタンオブジェクト
変数getFuncにはクリックイベント処理を固有番号で紐づける
変数buttonをfor of で回して、固有番号で分岐して、リスナーを設定する

button=document.getelementsbytagname('button')
getFunc={
固有番号:function(){}
固有番号:function(){},,,}

for(let i of button){
switch(i.value){
case '固有番号':i.addEventlistener('click',getFunc[固有番号]);break;



51 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 13:26:34.28 ID:x6nbCzKN0.net]
>>44
上の説明だとわかりづらいかな

let getButton=function(){button=document.getElementsByTagName('button');}

// valueの固有番号毎に処理を設定
let addEvent=function(){
for(let i of button){
switch (i.value){
case '101':i.addEventListener('click',addFunc[101]);break;}}}

let button;
// 関数をまとめ置く
let addFunc={
101:function(){console.log(this.value)},
102:function(){console.log(this.className)},}

52 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 19:57:25.19 ID:ES2RXggH0.net]
switchの中をObject.keys().forEach()でまわして
addFunc[+i.value]で作り直したらすっきりしそう
いじりたくなるコードだけど可読性を考えたらこれはこれなのか

53 名前:デフォルトの名無しさん mailto:sage [2021/11/16(火) 22:10:30.79 ID:iK58PKMQ0.net]
リアクトでのスマホアプリ開発なんですが、エミュレータは何がお勧めですか?
というのも実機を持っていません。

また、実機を使う場合はアンドロイド5などは使い物になりますか?
古い機種に合わせて作っても、上位互換性のないソフトになるんでしょうか?

54 名前:デフォルトの名無しさん mailto:sage [2021/11/17(水) 07:47:58.17 ID:/ZY56h0o0.net]
>>52
「React andoridアプリ開発 エミュレータ」で検索どうぞ
「api16 開発 不具合 or 互換性」で検索どうぞ

これがベストっていう答えがないから
開発者が自分で試行錯誤して答えを出す問題かな
互換性の問題は作るものによっても違うからね
jellyならそんな問題ないとおもうけど

55 名前:デフォルトの名無しさん mailto:sage [2021/11/17(水) 10:05:17.45 ID:syddc80l0.net]
>>53
jellyッテの調べてみますです

56 名前:デフォルトの名無しさん mailto:sage [2021/11/17(水) 14:33:19.47 ID:syddc80l0.net]
>>53
すみません。互換性に関して見つけられなかったです。
android5向けに作った場合、上位互換性ってあるんでしょうか?

javascriptのバージョン?次第とも考えられますけど

57 名前:デフォルトの名無しさん mailto:sage [2021/11/17(水) 17:43:10.56 ID:+3kxan1mM.net]
androidの話はandroid開発スレで聞いてくれ
多分実機なしは無謀、5は古すぎでFA

58 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 06:50:53.17 ID:TN6Tj1JF0.net]
>>56
了解す

59 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 07:17:54.57 ID:DvlppRWo0.net]
そんなことはない
android5で使えるアプリが目的なんだから
android5で作成するのがベスト

reactNativeエンジンがどうエンコードして
androidで動かしてるのか分らんので
今のreactでandroid5のどの機能を使えるのか
全然わからんけどな

60 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 07:27:37.77 ID:dAtvmzd9M.net]
React NativeはAndroid 5.0以上に対応だね

https://github.com/facebook/react-native



61 名前:デフォルトの名無しさん mailto:sage [2021/11/18(木) 19:32:55.35 ID:DvlppRWo0.net]
API21からなんだな

62 名前:デフォルトの名無しさん mailto:sage [2021/11/19(金) 12:50:28.04 ID:zuBm2fI80.net]
文字列化した数式を計算させるにはどうやればいいんですか?
test("x*x+10",2);

function test(suushiki_str,x){
var y = suushiki_str(この場合x*x+10)でx=2を代入;
retuen(y)
}
こういうのがやりたいんだけど

63 名前:デフォルトの名無しさん mailto:sage [2021/11/19(金) 12:55:11.51 ID:CS9Fe95O0.net]
function test(suushiki_str,x){
return eval(suushiki_str)
}

64 名前:デフォルトの名無しさん [2021/11/19(金) 13:17:09.00 ID:zuBm2fI80.net]
>>62
ありがとー

65 名前:デフォルトの名無しさん mailto:sage [2021/11/19(金) 13:41:30.73 ID:5MAibbygM.net]
何がしたいのか分からないけど、設計自体が間違ってる気がするけどなあ

66 名前:デフォルトの名無しさん mailto:sage [2021/11/19(金) 21:34:02.13 ID:FkG8ODwP0.net]
eval is evil
evalをそのまま使う事はまずないな

67 名前:デフォルトの名無しさん mailto:sage [2021/11/20(土) 07:02:21.23 ID:0rDRyz8e0.net]
evalを使えとなw

68 名前:デフォルトの名無しさん mailto:sage [2021/11/20(土) 07:04:06.68 ID:0rDRyz8e0.net]
evalが生きていること自体、JSが未成熟の証

69 名前:デフォルトの名無しさん mailto:sage [2021/11/20(土) 07:46:31.86 ID:0rDRyz8e0.net]
>>61
evalは非推奨だから

function test(fun,x){
return fun(x);
}

test(function(x){return x*x+10},5);
としときましょう

70 名前:デフォルトの名無しさん [2021/11/20(土) 18:55:29.17 ID:BgP9vp1q0.net]
evalって外部から入力させなければ使っても問題ないんじゃないの?



71 名前:デフォルトの名無しさん mailto:sage [2021/11/20(土) 18:57:47.86 ID:0rDRyz8e0.net]
使いたければつかったらいいよ

72 名前:デフォルトの名無しさん mailto:sage [2021/11/20(土) 19:05:52.91 ID:Gd107dzfr.net]
やっぱjavascriptできるとなんでも作れるな
めちゃくちゃ便利だわ

73 名前:デフォルトの名無しさん mailto:sage [2021/11/20(土) 19:54:48.88 ID:0rDRyz8e0.net]
ブラウザ限定だし
HTMLと一緒でメンテナンスとか関係なければな

もしJSで金融システムみたいな厳格なシステム作ろうとしたら
開発者はみんな気がくるってしまうんじゃないかな

74 名前:デフォルトの名無しさん mailto:sage [2021/11/20(土) 19:57:24.06 ID:Gd107dzfr.net]
マジでjavascriptだけでめちゃくちゃ儲けてる
使いこなせばガチで素晴らしい

75 名前:デフォルトの名無しさん [2021/11/20(土) 20:02:17.98 ID:4VXr5Xxs0.net]
仕事で使ってるサイトをJavascriptで自動化できませんか?
たとえば出勤と退勤のときの時間を管理するのに「勤次郎」というサイトを使ってるんだけど
毎回ログインしたあといちいち入力するのが面倒くさい。

76 名前:デフォルトの名無しさん mailto:sage [2021/11/20(土) 20:22:43.02 ID:0rDRyz8e0.net]
>>74
データーの保存はどこを想定してますか?

77 名前:デフォルトの名無しさん mailto:sage [2021/11/20(土) 20:24:55.79 ID:b48agA+u0.net]
seleniumでいいじゃん

78 名前:デフォルトの名無しさん mailto:sage [2021/11/20(土) 20:46:00.92 ID:Gd107dzfr.net]
認証しないシステムなんて攻撃か踏み台にされるとか考えないのか

79 名前:デフォルトの名無しさん mailto:sage [2021/11/20(土) 21:05:08.87 ID:t4XZd1270.net]
定型をポチポチ入力してボタン押すのがダルい程度ならブックマークレットでいいだろ

80 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 08:08:40.09 ID:zYUtuXs90.net]
>>74
ブラウザを自動操作なら、iMacros は?

例えば漏れは、Ruby のselenium-webdriver で、
ブラウザを自動操作して、ヤフーにログインしてる

ユーザー名を入力して、ボタンを押す。
パスワードを入力して、ボタンを押すとか

require "selenium-webdriver"

options = Selenium::WebDriver::Chrome::Options.new
options.add_option( :detach, true ) # ブラウザを切り離す
options.add_argument( '--start-maximized' ) # 画面最大

driver = Selenium::WebDriver.for :chrome, options: options
driver.manage.timeouts.implicit_wait = 10 # default timeout

driver.navigate.to "https://login.yahoo.co.jp/config/login_verify2?.src=ym"

element = driver.find_element(:id => "username")
element.send_key "ユーザー名"

driver.find_element(:id => "btnNext").click # ボタンを押す

element = driver.find_element(:id => "passwd")
element.send_key "パスワード"

driver.find_element(:id => "btnSubmit").click # ボタンを押す



81 名前:デフォルトの名無しさん [2021/11/21(日) 18:31:02.25 ID:8Vc5P3wO0.net]
>>768
それだと数式を""で囲んで文字列にすると計算できない

82 名前:デフォルトの名無しさん [2021/11/21(日) 18:31:35.22 ID:8Vc5P3wO0.net]
>>68

83 名前:デフォルトの名無しさん [2021/11/21(日) 19:15:18.38 ID:s72Bw1rA0.net]
classが非推奨になるのはいつですか?

84 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 19:23:58.62 ID:6CiZCeOJ0.net]
>>82
その予定はない

85 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 21:16:08.25 ID:CIU/fTVN0.net]
>>81
>>70で答えてる

eval非推奨な意味を理解していて使うならそれでいいんじゃね?

86 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 21:19:33.19 ID:QvzeRvg10.net]
>>61
function test(suushiki_str, x){
var f = Function('x', 'return ' + suushiki_str);
return f(x);
}

test('x * x + 10' ,2);
//=> 14

87 名前:デフォルトの名無しさん mailto:sage [2021/11/21(日) 22:55:28.72 ID:EhgufZNWr.net]
javascriptが使えるとやりたいことが簡単にできる

88 名前:デフォルトの名無しさん [2021/11/22(月) 11:19:44.15 ID:svQfIHqM0.net]
>>86
JavaScript最強伝説。

89 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 14:30:42.59 ID:zL7mhfu3r.net]
ブラウザで動く
LambdaやGoogle Functionsで動く
デスクトップアプリも作れる
OfficeWeb版やGASでも動く

インフラ構築不要で最強すぎるだろ

90 名前:デフォルトの名無しさん [2021/11/22(月) 16:46:08.87 ID:svQfIHqM0.net]
>>88
でも、文法が分かりにくい。
というか無駄に複雑過ぎる。



91 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 16:48:25.46 ID:zL7mhfu3r.net]
>>89
文法なんかふつう

複雑な意味がわからん
ほかの言語だと単純なの?

92 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 17:43:25.62 ID:+p8qnn8E0.net]
すいません、下記のように読み込んだshiftJISのcsvファイルを
正規表現を使って置換しようとしてるのですがうまくいきません

文字コードの問題なのか指定したマッチパターン意外の色んな文字が勝手に置換されてしまいます

const requestCSV = new XMLHttpRequest();
requestCSV.overrideMimeType('text/plain; charset=Shift_JIS');//csvの文字コードがshiftJSであることは変更できない

requestCSV.addEventListener('load', (event) => {

 const orgCSV = event.target.responseText;
 tempKey="["+key+"]";//keyは変数を使う必要があります
 keyName = new RegExp(tempKey, "g");//複数マッチさせる必要があります

 result=orgCSV.replace(keyName, "ほげ");
}

正規表現オブジェクトを使わずにreplaceさせると問題なく動くのですが、
マッチパターンを変数にしたいのと、複数回以上にマッチさせるため g をつけるため、
正規表現オブジェクトを使わざるを得ない状態です。

どなたかアドバイスお願いできますでしょうか

93 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 17:45:45.05 ID:svQfIHqM0.net]
>>90
Javaの方が分かりやすかった。

94 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 18:41:55.55 ID:kseOISZ70.net]
Javaと比べたらJavaScriptのほうが文法複雑じゃないと思うが…
TypeScriptと混同してない?

95 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 18:43:22.51 ID:kseOISZ70.net]
それかDOM APIをJavaScriptの文法に含むと勘違いしてるとか

96 名前:デフォルトの名無しさん [2021/11/22(月) 18:50:50.35 ID:jaRoUi/NM.net]
Javaのほうが圧倒的にすっきりしている。
ほんとに両言語をちゃんと勉強したことあるか?
アルツハイマーでもこれくらい分かる。

97 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 18:53:04.86 ID:yUT2zM6b0.net]
>>91
keyを[]で囲む必要なし

98 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 18:54:55.94 ID:LGR+CB3F0.net]
>>94
古いJSとの互換性を取ろうとすると
古い文法も理解しないとならないからな
オブジェクトの生成も多種多様
JSの細かいところまで理解しようとすると
javaやpythonとかのほうが整理されていてわかりやすい

let obj var objのLexicalの違いや
let obj={}
let fun=function(){}
function fun(){}
class cs extends fun{}
class cs{
__proto__=a;
}

obj.constructor.prorotype=obj
newObjext ,Object.create

こんなのシンプルなわけがない

と92はいいたんだと思う

99 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 19:05:02.79 ID:+p8qnn8E0.net]
>>96
"["+key+"]"

というようにカッコで囲んだ形式で検索したいのでここはあえてそうしてるんです…

100 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 19:40:22.23 ID:kseOISZ70.net]
Java
class Main {
public static void main(String[] args) {
System.out.println("Hello World!");
}
}

JavaScript
console.log("Hello World!");

hello worldからしてこれだからな
あなたの「シンプル」の定義を見せてもらえないと…



101 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 20:19:16.63 ID:LGR+CB3F0.net]
>>99
JSのクラスは疑似クラス
他言語のClassと同じように扱えるように
functionを疑似的にclass表現できるようにしてるだけ

Javaと異なりJSはconstructorを有するオブジェクトの生成方法が沢山ある
それすら理解できずに、99の問いとは、、、もっとJSを勉強しようぜ
Javaのほうが圧倒的に整理され覚える文法が少ない

つか、JavaとJS、両方ともそこそこ使えたら
99みたいなこと言えないだろw

102 名前:デフォルトの名無しさん mailto:sage [2021/11/22(月) 20:26:36.75 ID:LGR+CB3F0.net]
>>99
もうちょっと言わせてもらえば
Javaは変数エラーをチェックしやすい言語設計
JSは変数エラーを無限に生成し得る言語設計

JSはマークアップを動的に処理することから発生し
高度な言語設計にしても互換性の問題から
古い文法を生かしているので、とても複雑怪奇になっている

そう表現したらわかるかな?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](;´∀`)<334KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef