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

■ このスレッドは過去ログ倉庫に格納されています
2018/04/16(月) 00:09:43.45ID:???
JavaScript を自ら学ぶ人のための質問スレッドです。
次スレは>>950が(本スレで改善案があれば考慮して)立ててください

■規則/推奨ルール
・メール欄を空欄にし、名前にレス番を入れることを強く推奨(なりすまし防止)
・質問内容は具体的に。言葉だけでなく、出来る限り再現性を確認したサンプルコードの掲示。
・質問テンプレートの利用推奨。
・質問への「答え」だけでなく「意見」を出しても良い。

■禁止行為
・丸投げ質問
・迷惑スクリプトの質問
・オレオレ用語の使用(一般的な用語を使用する事)
・煽り、批判等の他人を不快にさせる行為(批判の代わりに「AよりBが良い」のような代案を出す事)

■質問テンプレート
【環境】OS, ブラウザをバージョンと共に記入してください。
【条件】期待する回答の条件を書いてください。
【何をしたのか】何をしたら問題の現象が発生するのか。再現手順を具体的に書いてください。
【エラーメッセージ】エラーメッセージがあれば正確に書き写してください。
【期待する結果】最終的にどういう結果を望んでいるのか、を書いてください。
【サンプルコード】現象を再現可能な最小限のコードを書いてください。
 1レスに収まらないならコード投稿サイトを利用してください。
 http://jsdo.it/ http://jsbin.com/ http://jsfiddle.net/ http://ideone.com/

■回答者へ
・回答には多様性があります。他人の回答を尊重してください
・動作ブラウザや環境が限られる場合は、それを明記してください
・他人の回答を批判する代わりに、自分ならこう書くという例を示してください
・質問者がJavaScriptでなければ実現できないと勘違いしてるなら、その否定としてHTMLとCSSで実装しても良い
・他人の回答を見たくないのであれば、文句をつける代わりにNGにして見えないようにしてください。文句をつける=荒らしです
2018/04/29(日) 17:52:00.36ID:???
結局>>192をどうつかってるのか分からんだよね
2018/04/29(日) 17:52:24.38ID:???
>>232
jqueryスレへどうぞ
2018/04/29(日) 17:54:55.27ID:???
> 関数外部からhoge();
> としたらエラーになります

こことかpublic/privateの話だよね
2018/04/29(日) 18:17:39.97ID:???
>>235
192はアホすぎて使いようがいない印象をうける
だからこそどうやって使うのかにはかなり興味あるのだがそれは示せないだろう
2018/04/29(日) 18:19:11.61ID:???
>>232
意味が分からん。

$(document).trigger('click')ってやったら、
HTMLに含まれる全てのボタンやリンクに対して
クリックされたというイベントを発動させたいのか?
2018/04/29(日) 23:26:04.99ID:???
>>217
たしかにどこが複雑なのかも分からん
我流じゃなくて関数型の勉強したほう良いと思う
2018/04/30(月) 02:27:12.24ID:???
うっせかす
俺より底辺共が生意気言うなぼけ
2018/04/30(月) 07:42:58.80ID:???
簡潔で非ライブラリ依存なコードをあっさり提示されてて草
2018/04/30(月) 08:54:29.58ID:???
>>242
何の話?
2018/04/30(月) 09:26:53.31ID:???
わからんね。簡素じゃなくて冗長なクソコードなら
>>220にあるけどそれのことかな?w

なにがクソかというと無駄なことしてるから。
clearTimeoutが無効な値を渡しても例外でないのは保証されてるのだから
>>220はこれだけでいい。これがクソコードである根拠
やらなくて良いことをやるのは丁寧なのではなく単に無駄なだけ

document.getElementById('mybutton').addEventListener( 'click', function f(){
  var delay = 3000;
  clearTimeout(f.timeoutId);
  f.timeoutId = setTimeout( function(){
    /* my oparation */
  }, delay );
}, false );

そしてもちろんこれはライブラリを使えば、もっと簡素に実現できる

$('#mybutton').click(_.debounce(function() {
 /* my oparation */
}, 3000));

非ライブラリのコードも簡素に書けないやつが、
ライブラリよりも簡素に書けるとか言わないほうが良い
恥をかくだけだぞw
2018/04/30(月) 09:38:55.23ID:???
>>217
単に_.debounceの使い方が良くない

_.debounce は オリジナルのイベントハンドラを
遅延実行機能付のイベントハンドラに変えるもの
と考えたほうが良い

そこに書いたコードは、これだけでいい

$(document).on('click', '#hoge', _.debounce(function() {
  $('#moge').fadeOut();
  // いろいろな処理
}, 3000));

jQueryのstopはよく分からんね。俺もアニメーションはあまり使わないので。
俺が言えることは今はCSSを使ったほうが良いということぐらいだろう

stopだけで単体で実行したらキャンセルされるが、stop().delay()みたいに
続けるとキャンセルできないアニメーションのキュー(?)の絡みの仕様なんだろうけど

ドキュメントにも、setTimeoutを置き換えるものじゃないと書いてあるので
https://api.jquery.com/delay/
setTimeoutをそのまま使うか、lodashでラップされた関数を使うほうが良いのだろう
2018/04/30(月) 09:41:25.07ID:???
やっぱり俺がいないとスレのレベルが下がるなw
jQueryを使ったコードだけでなく、
ネイティブのコードもね
2018/04/30(月) 10:15:48.14ID:???
>>244
旧泥でclearTimeoutにundefinedを渡すとエラー吐くことがあった気がするが
nullや、あと確かfalseだとエラーを吐かない

LS仕様ではdo nothingと決められていることや
ライブラリではその辺の扱いを別所で定義しているから行数が減ることは間違いない
見て読みやすいコードは無駄ではないことも間違いないとは思うが
248247
垢版 |
2018/04/30(月) 10:21:17.97ID:???
今ちらっとlodashのgithubを見てきたがdebounce.jsのcancelで以下のように確認を入れてから
cancelTimerでclearTimeoutしているところから見ても、少なくとも無駄ではないと思う
というより、事前確認が無駄ならlodashのこの記述も無駄になるような

if (timerId !== undefined) {
cancelTimer(timerId)
}
2018/04/30(月) 10:27:39.80ID:???
>>247
そういうことを考慮したとしてもこれだけですむ
冗長なことに変わりはないよ

document.getElementById('mybutton').addEventListener( 'click', function f(){
  var delay = 3000;
  if (f.timeoutId) clearTimeout(f.timeoutId);
  f.timeoutId = setTimeout( function(){
    f.timeoutId = undefined;
    /* my oparation */
  }, delay );
}, false );
250247
垢版 |
2018/04/30(月) 10:46:15.44ID:???
>>249
clearTimeoutに渡す内容の確認はクソコードかつ無駄ではなく必要なものだったと
認めたということで良いかな

初期化は好み次第だと思うけどね
javascriptではプロパティは事前定義しなくてもいいというのは正直どうかと思うところがある
2018/04/30(月) 10:51:32.04ID:???
いや? 無駄だよ。
意味があるというのならその証拠をどうぞ
2018/04/30(月) 10:56:25.11ID:???
こんな木っ端の作法で云々言うのやめようよ
2018/04/30(月) 10:57:24.46ID:???
jq兄貴lodashを否定してしまう
2018/04/30(月) 10:57:57.08ID:???
せやねw

最終的な答の簡潔さに比べれば
そんな問題考えるだけ無駄

$(document).on('click', '#hoge', _.debounce(function() {
  $('#moge').fadeOut();
  // いろいろな処理
}, 3000));
2018/04/30(月) 10:58:33.72ID:???
この流れで認めるとこはビシっと認めたらかっこよかった
2018/04/30(月) 11:01:33.09ID:???
どこかの誰かと違って、ライブラリ最高って言ってるわけじゃないんだから
ライブラリにも無駄なところはあるよ。(はい、ビシッと認めましたよ?w)
だからこそライブラリはバージョンアップし続けてるんだろう。
2018/04/30(月) 16:37:45.33ID:???
解釈の原因は解釈者自身の固定観念。解釈の自由には責任が伴う
言葉風紀世相の乱れはそう感じる人の心の乱れの自己投影。人は鏡
憤怒は一時の狂気、無知無能の自己証明。中途半端な知識主ほど激昂
「真実は一つ」は錯誤。執着する者ほど矛盾を体験(争い煩悩)
他人に不自由(制約)を与えれば己も不自由(不快)を得る
問題解決力の乏しい者ほど自己防衛の為に礼儀作法マナーを要求
情報分析力の低い者ほどデマ宗教フェイク疑似科学に感化洗脳
自己肯定感の欠けた者ほど「己の知見こそ全で真」に自己陶酔
人生経験の少ない者ほど嫌いキモイ怖いウザイ憎い想定外を体験
キリスト教は世界最大のカルト。聖書は史上最も売れているト本
全ては必然。偶然 奇跡 理不尽 不条理は思考停止 視野狭窄の産物
人生存在現象に元々意味価値理由目的義務使命はない
宗教民族領土貧困は争いの「原因」ではなく「口実動機言訳」
虐め差別犯罪テロ紛争は根絶可能。必要なのは適切十分な高度教育
体罰は指導力問題解決力の乏しい教育素人の独善甘え怠慢責任転嫁
死刑は民度の低い排他的集団リンチ殺人。「死ねば償える」は偽善
核武装論は人間不信と劣等感に苛まれた臆病な外交素人の精神安定剤
投票率低下は社会成熟の徴候。奇人変人の当選は議員数過多の証左

感情自己責任論 〜学校では教えない合理主義哲学〜 m9`・ω・)
2018/04/30(月) 17:47:37.77ID:???
レベル低い人ばっかりですね。
面倒くさいのでレベル低いだけで私のコード理解できないとかいう人はレスしないでもらえますか?
2018/04/30(月) 18:20:09.86ID:???
コテ付けて貰えば最初から近付かないよ
2018/04/30(月) 19:08:04.78ID:???
>>259
何を言ってるんでしょうか?
自分でレベル低いってのは認識してるとおもうので
貴方みたいなレベル低い人はそもそも回答なんてしなければいいだけじゃないのでしょうか?
2018/04/30(月) 19:21:10.31ID:???
>>260
自称高レベルの君が書いたコードはどれなの?
2018/04/30(月) 19:37:40.07ID:???
>>261
バカなのですか?
あなた達が低レベルが理解できないとかいってるコードがそれですよ
聞かないとわからないほど低レベルなんですか?
私は誰でも名前をしってる会社で働いてるんです。
あなた達とはレベルガチがすぎる。
まさか5chがここまでレベル低いとは思わなかったのですが
もうこんなとこ来ません。
2018/04/30(月) 19:48:06.51ID:???
モウコネーヨ懐かしい
2018/04/30(月) 19:52:39.35ID:???
有難い
2018/04/30(月) 19:59:30.21ID:???
ウワァァン
2018/05/01(火) 09:27:21.96ID:???
初めてのandroidアプリ開発でSPA使っちゃった(cordova)けどまずかった?
267Name_Not_Found
垢版 |
2018/05/01(火) 18:20:10.76ID:l1wYHpV1
誰でもできる在宅ワーク儲かる方法
少しでも多くの方の役に立ちたいです
グーグルで検索するといいかも『金持ちになりたい 鎌野介メソッド』

IZRJV
2018/05/01(火) 20:41:26.09ID:???
>>249
そんなこと気にしだしたらidがオーバーフローしてないかとか
万が一doubleの整数部分超える実装になってたらどうするのかとか
ほんとキリがないゾ

余計な懸念は捨てて少なくともここに提示するコードは最小限のものにしようヤ
パッチは実際テストで問題出てからでいいじゃん
今や6ヶ月毎にブラウザは更新されるんだから同じバグがいつまでもあるものではないシ
反対に新しいバグがその時に出てきてるかもしれないんだからサ
2018/05/01(火) 20:42:37.27ID:???
❌6ヶ月

🔴6ヶ週
2018/05/01(火) 21:31:49.76ID:???
>>266
全然というかSPAはあくまでもwebアプリに対する概念
普通cordovaでページ遷移は付けない
2018/05/02(水) 06:34:20.39ID:???
そんなことはない
Google検索とかもSPAのうち
2018/05/02(水) 10:46:33.03ID:???
https://lodash.com/docs/4.17.10

このlodashのドキュメントページが読み込み中になったまま固まるのですが自分だけでしょうか?
2018/05/02(水) 12:11:38.84ID:???
おまえだけ
2018/05/02(水) 13:55:52.37ID:???
ありがとうございました
2018/05/02(水) 13:58:47.38ID:???
class構文において
staticなメソッドはstaticキーワードをメソッド名に置くことで実現できますが
staticなプロパティはどうやって実現するのでしょうか?
2018/05/02(水) 13:59:25.54ID:???
×メソッド名に
○メソッド名の前に

でした
2018/05/02(水) 16:45:45.01ID:???
クラス名.プロパティ名
2018/05/02(水) 17:42:21.32ID:???
lodashのuniqueIdって、PHPのuniqidみたいな、
まずバッティングしないIDを生成するものかと思っていたのですが
ただ連番を返すだけのもののようです・・
PHPのuniqidみたいなIDが欲しい時にはどうやるのでしょうか?
2018/05/02(水) 20:10:58.91ID:???
>>277
確かにそれで出来るのですが、どこで初期化するのかが問題です
初期化用staticメソッドを用意して外から呼ぶか、
コンストラクタからそれを最初の一回だけ実行するとかでしょうか?
2018/05/02(水) 22:23:57.87ID:???
class Hoge {
}
Hoge.initialize();

みたいにクラス定義のすぐ下に書くことにしました
これもイケてないですが、イケてるやり方なんてなさそうなので・・
2018/05/03(木) 16:42:00.63ID:???
殆どの場合 static get method ( ) { } で済むでしょ
それかES2019まで待つか
2018/05/03(木) 17:12:10.95ID:???
get set追加したんならoperatorも追加してほしい。
以上、混沌を望むものより。
2018/05/03(木) 17:13:49.42ID:???
hoge.js
(function(){/* hogehoge */})();
fuga.js
(function(){/* fugafuga */})();

みたいに分けてグローバル汚染を回避しつつモジュールみたいにして管理したいんですけど
export/importみたいなのっていつ頃標準化?されるんでしょうか
2018/05/03(木) 17:36:57.46ID:???
標準化はもうされてるだろ。
ブラウザ実装情況はここでも見ろ
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/import
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/export
2018/05/03(木) 17:37:05.55ID:???
>>283
されてる
但しIEには何も期待するな
2018/05/03(木) 17:46:16.04ID:???
>>282
提案はずっと前から色々あるぞ
まずbigintが追加されたでしょ、その後はnumberの拡張が来る
n = 1px + 2em
みたいに書けるようになるってこと

だけどそれ以上はまだ目処がついてないかな
でもそのクラスのインスタンスがvalue proxy的なものになるんだと考えると
混沌ではなくむしろ比較的自然でシンプルだし、そういう流れで行くかもね
2018/05/03(木) 18:01:57.47ID:???
>>284-285
ローカルだとセキュリティやら何やらでできないみたいですね
サーバーにアップしたらいけました
ありがとうございます
2018/05/03(木) 20:51:06.15ID:???
export default class {
constructor(x,y){
this.x=x;
this.y=y;
}
sum(){
return this.x+this.y;
}
}

こういう宣言をしていて、classのブロックの中ではなく
別のところにsum関数を(ES6で)書き加えたい時ってどうすればよいのでしょうか
2018/05/03(木) 20:52:25.15ID:???
補足
>別のところ
export default class{
constructor(){}
}
sum(){}

みたいな感じです
2018/05/03(木) 21:04:14.07ID:???
別のところ、ってどこで誰が使う想定なのか
2018/05/03(木) 21:14:47.36ID:???
const Hoge = function(){}
Hoge.prototype.sum = function(){}

みたいに、単にこういう風に書けるのだろうか
と思っただけです >>290
書けなくても特に問題ないです
2018/05/03(木) 22:18:11.57ID:???
classは単なる糖衣構文だし
default exportに名前をつけちゃいけない決まりはないから
export default class Hoge{
constructor(){}
}
Hoge.prototype.sum = function(){}
みたいのは可能なんじゃないの(ごめん試してないです)
2018/05/03(木) 22:59:33.23ID:???
>>292
最初はdefaultもなしでexport class Hogeで、prototypeで追加してたのですが
なんとなくES6で書き加えたい(統一したい)なと思ったのです
あとは、import先で汚染した(や被り気味の命名など)と気づいたとき
export先と行ったり来たりするのがめんどうかなと思い
あえてdefaultのままにしました
2018/05/04(金) 00:54:10.65ID:???
結局staticってどういうこと?
2018/05/04(金) 04:16:05.09ID:???
なぜprototypeに書き加える必要があるのか
というか書き加えたメソッドはHomeObjectが設定されないし
最初から存在するメソッドと等価にはならないからね
2018/05/04(金) 11:45:24.52ID:???
>>295
>HomeObjectが設定されない
とは?
こういうことではなくて?↓
https://jsfiddle.net/pyLbpgrx/
2018/05/04(金) 15:17:45.94ID:???
>>295
HomeObjectとかよその用語当たり前みたいに使うなよな
jsスレでマジックメソッドがどうの言ってるきちがいもいた
2018/05/04(金) 16:17:13.67ID:???
JSBinの読み方はジェイエスビンでいいのでしょうか?
2018/05/04(金) 18:48:52.82ID:???
>>297
何が言いたいのかよく分からんが
JSでメソッドとHomeObjectの関係は重要だぞ
https://tc39.github.io/ecma262/#sec-makemethod
2018/05/04(金) 23:07:45.97ID:???
指定の値を指定数並べた配列を作るには
ループでpushしたり
lengthを伸ばしてからfillしたりするしかないのでしょうか?
2018/05/04(金) 23:21:13.30ID:???
javascriptで今流行りの機械学習勉強したいのですがだめですか?
本が全然みつからない。
もう年だしプログラマーでもないので他の言語やりたくない。
2018/05/04(金) 23:29:33.17ID:???
ガッツリやりたいならCPUでは限界があるから
どちらにせよWebGLを使うことになるからそれは他言語で書いてるようなもの
まあTensorFlow.jsくらいからやるといいんじゃない
2018/05/04(金) 23:31:14.64ID:???
>>300

つくりたい数列による
遅延評価とか再帰をつかって数列を作る手法もある。
2018/05/04(金) 23:41:16.30ID:???
>>303
ありがとうございます
単純な整数値を入れた配列です
2018/05/04(金) 23:46:54.39ID:???
一定の規則に沿った数列をいくつか作りたいなら
ベースとなる配列作っといてそれをmap()で回すとか?
2018/05/05(土) 01:38:02.67ID:???
>>304
たとえば3を45個並べた配列aを作るには、
var a = Array(45).fill(3)
だがこういうことではなくて?
2018/05/05(土) 09:52:31.36ID:???
初めてのJavaScript 第3版 ―ES2015以降の最新ウェブ開発
https://www.amazon.co.jp/dp/toc/4873117836/ref=dp_toc?_encoding=UTF8&;n=465392

徹底マスター JavaScriptの教科書 プログラミングの教養から、言語仕様、開発技法までが正しく身につく (Informatics&IDEA)
https://www.amazon.co.jp/dp/toc/4797388641/ref=dp_toc?_encoding=UTF8&;n=465392

上の2つならどっちがおすすめ?
一通りの知識はあるけどもうちょっと知識深めたいってレベルです。
2018/05/05(土) 10:22:50.38ID:???
>>306
ありがとうございます
たしかに配列を作成するのはそれが一番シンプルですね
実際の問題はすでにある配列に同一の要素を任意数追加するというもので
fillやpushを使う以外にもっとシンプルな方法があるんじゃないかと思ったのですが、なさそうですね
ありがとうごさいました
2018/05/05(土) 13:13:34.14ID:???
配列のlengthを拡張してあってパターンを含ませてるならcopyWithinで1発
2018/05/05(土) 13:31:53.16ID:???
>>307
それくらいならMDN眺めたり実装追ってるブログ見りゃいいと思うよ
2018/05/05(土) 13:48:06.19ID:???
>>308
すでにある配列をaとして、3を45個追加した配列bを作るには、
var b = [...a, ...Array(45).fill(3)]
だがこういうことではなくて?
2018/05/05(土) 14:26:31.11ID:???
>>たしかに配列を作成するのはそれが一番シンプルですね
>>実際の問題はすでにある配列に同一の要素を任意数追加するというもので
2018/05/05(土) 14:47:32.83ID:???
あー破壊変更が要件なのか
2018/05/05(土) 15:44:58.29ID:???
それならpushでいいじゃん。ループは要らないぞ。
何で嫌がるのかサッパリだらっしゃい…

すでにある配列をaに、3を45個追加するには、
a.push(...Array(45).fill(3))
だがこういうことではなくて?
2018/05/05(土) 16:54:36.80ID:???
>>fillやpushを使う以外にもっとシンプルな方法があるんじゃないかと思ったのですが、なさそうですね
2018/05/05(土) 16:59:08.38ID:???
use strict宣言してた場合、;セミコロンも書かないのが普通?
つまり、好みの問題じゃなく全部改行使って書いたほうがいい?(結局圧縮するだろうし)
2018/05/05(土) 19:00:38.55ID:???
use strictはセミコロンの挙動を変えはしないぞ
つまるところ好みの問題だぞ
〜の方が良い?的な質問はしないほうが良いぞ
2018/05/05(土) 19:44:45.70ID:???
>>315
もっとシンプルな方法…?
有りうるのか?どういうAPIになるんだろ?
2018/05/05(土) 22:54:57.27ID:???
>>308
自分で関数つくればいいだけやろ
しね
2018/05/05(土) 23:11:58.39ID:???
だからstaticな変数ってなんなの?
誰か教えてよ
2018/05/05(土) 23:32:43.43ID:???
Int8Array.BYTES_PER_ELEMENT
的なクラスに直接生えてるプロパティのことだろ
ES2019くらいで
class {
static p = hoge
}
と書けるようになるとは思うが、
それまでは代わりに
class {
static get p() { return hoge }
}
とするのが定石だな

prototype下のプロパティでも同じだ
2018/05/05(土) 23:36:13.47ID:???
>>317
あ、そういう意味ではなくて今後セミコロンが廃止になりますか?
みたいなニュアンスだったのです
調べてみるとuse strictに限らずセミコロンありなし混合はjavascriptのそういうスタイルだったみたいですね
ありがとうございました
2018/05/05(土) 23:38:49.21ID:???
super()って便利なのにネーミングがダサくない?
2018/05/06(日) 00:27:00.89ID:???
>>320
参照透過性のある書き換え不能の変数じゃないのか?
2018/05/06(日) 01:10:59.37ID:???
>>322
そりゃ100年後は分からんが、現時点で非推奨になる理由がないだろう
ある面ではスペースみたいな存在なのだから

ほとんどの普通の言語およびコミュニティに於いてそれが無駄だとしても
言語仕様として過剰なスペースを禁止しようということにはならないだろう
2018/05/06(日) 11:40:55.77ID:???
例えばデジタル時計を表示するアプリをつくったときに
setIntervalで1秒毎に更新するようにして
スリープ状態になってスリープ解除すると
遅れた時間が表示されます。

@これはどうしてなのでしょうか?
スリープになると、タイマーが止まって処理が実行されずにキューが溜まっていって、
解除されるとタイマーが止まった時点から再開して
溜まったキューが最初の分からひとずつ実行されるのかなとおもってるのですが
この考えは完全に正解でしょうか?1つでもおかしなとこあったら教えて下さい

Aどう解消すればいいのでしょうか?
2018/05/06(日) 13:01:45.01ID:???
@代わりにsetTimeoutで実装することを考えたら分かりやすいだろう
実行されたら次のキューを登録する
したがって実行が遅延するとキューが溜まっていくことはない

Aそもそも精度は保証されて無く、色々なことで遅れるので、
JSに限らずだがタイマーで時を進めて行ってはいけない
更新の度に現在時刻を取得すること
もしストップウォッチ的なものなら開始時刻を取っておいて、毎回比較して差分を出す
そしてオマケで更新はrequestAnimationFrameを使うと良い
2018/05/07(月) 01:56:12.73ID:???
>>302
TensorFlow.jsって
TensorFlowの本に書いてるコード実行すればJSでも動くってことですか?
つまり記法は全く同じ?
2018/05/07(月) 01:59:23.73ID:???
そのレベルならやめといた方がいい。
pythonでやりな。
あっちはあっちで大変だと思うが。
2018/05/07(月) 07:02:16.48ID:???
基本的に既にできてるモデルをWebで動かす用であって
学習もできなくはないけどAPIもぜんぜん違うよ
2018/05/07(月) 14:39:20.03ID:???
>>324
それはないでしょ。
だってそれならクロージャで実現できる。
クロージャに値を閉じ込めればいいだけの話。
クロージャは知ってるって言ってたから
そいうことではないだろ。
2018/05/07(月) 15:46:50.00ID:???
普通static変数=静的な変数っていったら、呼び出すごとに初期化されず状態が保持される変数のことでいい
言語によって扱いは全然異なる
javascriptではクロージャに閉じ込めればもちろんできるし
そもそもjavascriptにあんまし馴染まない概念といえなくもない

こんなとこで合ってる?(質問)
2018/05/07(月) 20:21:58.21ID:???
いや、そういう関数の機能としてのstatic変数が存在する言語は少ないので
普通staticな変数と言ったらクラスの何らかを想定するだろう、JSでも
2018/05/07(月) 20:48:57.29ID:???
classでも基本同じでは
インスタンスごとに独立固有でなくインスタンス間で共有され、
インスタンス生成ごとに初期化されるのではなく、一度だけ初期化される、要するに状態が保持される

静的変数が関係する場合、常に同じ入力に対し同じ結果が返されるとは限らない
なので静的変数の性質として「参照透過性があること」を持ってくるのは間違い

書き換え不能かどうかも静的変数の概念には直接関係しない
2018/05/08(火) 06:29:45.79ID:???
それを言うとJSの場合はstaticな変数なんて存在しないけどな
staticとして宣言されたものはクラスオブジェクトのプロパティになるだけだから
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況