私的良スレ書庫
不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitterでログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。
元スレ+ JavaScript の質問用スレッド vol.115 +
JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニューみんなの評価 :
レスフィルター : (試験中)
>>899
めんどくせぇやつだな。
関数直下以外はブロックスコープだよ。
関数スコープはなくなったわけじゃないし、
letを使わない限り、関数スコープ。
ES5では関数スコープしかなくて、
ES6で新たにブロックスコープという概念が追加されたの。
めんどくせぇやつだな。
関数直下以外はブロックスコープだよ。
関数スコープはなくなったわけじゃないし、
letを使わない限り、関数スコープ。
ES5では関数スコープしかなくて、
ES6で新たにブロックスコープという概念が追加されたの。
>>898
> letを使わない限り変数は関数スコープとなり、ブロックスコープはオプションと考えられる。
お手すきであれば教えて頂きたいのですが、>>887の「if文内での関数宣言がブロックスコープ」はES6にはない仕様で合ってるでしょうか
http://people.mozilla.org/~jorendorff/es6-draft.html から該当仕様を探そうとしていますが、見つけることが出来ず
自分の読解力がないだけなのか、本当に存在しないのか判断出来ませんでした
> letを使わない限り変数は関数スコープとなり、ブロックスコープはオプションと考えられる。
お手すきであれば教えて頂きたいのですが、>>887の「if文内での関数宣言がブロックスコープ」はES6にはない仕様で合ってるでしょうか
http://people.mozilla.org/~jorendorff/es6-draft.html から該当仕様を探そうとしていますが、見つけることが出来ず
自分の読解力がないだけなのか、本当に存在しないのか判断出来ませんでした
>>902
はいそうです。
関数定義はブロックでやってはいけません。
そもそも、動的に定義する必要がないものは静的に定義するのが良いコードなので、
関数定義は(必要がない限り)function文で行うものです。function式で行うべきじゃありません。
ifなどのブロックは実行時に処理されるかどうか決まるので本質的に動的です。
だから静的に行うべき関数定義は、静的に、ゆえに関数スコープでやるべきなのです。
はいそうです。
関数定義はブロックでやってはいけません。
そもそも、動的に定義する必要がないものは静的に定義するのが良いコードなので、
関数定義は(必要がない限り)function文で行うものです。function式で行うべきじゃありません。
ifなどのブロックは実行時に処理されるかどうか決まるので本質的に動的です。
だから静的に行うべき関数定義は、静的に、ゆえに関数スコープでやるべきなのです。
>>903
ありがとうございます。おかげ様ですっきりしました
私はif文内で関数を生成するなら関数式を使うのが自然だと思うので、ES6でもそのようにします
ところで、ES6 では let 以外は関数スコープとの事でしたが、const もブロックスコープではなかったでしょうか
あと、細かいことで恐縮ですが、あなたの仰る「関数定義」は「関数宣言」ではないでしょうか
ES6における関数定義は関数式を含むので文章通りに受け取るとおかしなことになってしまいます
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-function-definitions
ありがとうございます。おかげ様ですっきりしました
私はif文内で関数を生成するなら関数式を使うのが自然だと思うので、ES6でもそのようにします
ところで、ES6 では let 以外は関数スコープとの事でしたが、const もブロックスコープではなかったでしょうか
あと、細かいことで恐縮ですが、あなたの仰る「関数定義」は「関数宣言」ではないでしょうか
ES6における関数定義は関数式を含むので文章通りに受け取るとおかしなことになってしまいます
http://people.mozilla.org/~jorendorff/es6-draft.html#sec-function-definitions
いや、スコープは場所で決まるんだよ。
ただし、ブロックスコープで有効な変数は
letを使うってだけ。
letを使った所がブロックスコープになるのではない。
ただし、ブロックスコープで有効な変数は
letを使うってだけ。
letを使った所がブロックスコープになるのではない。
>>905
> 私はif文内で関数を生成するなら
いや、そういう区別の仕方はおかしいでしょw
動的に関数を生成するかどうかで決めるのが正しい。
動的に関数を定義するのは、定義するタイミングが動的になってしまう。
これは静的に決まることよりもコードのメンテナンス性という意味で
悪くなってる。
> 私はif文内で関数を生成するなら
いや、そういう区別の仕方はおかしいでしょw
動的に関数を生成するかどうかで決めるのが正しい。
動的に関数を定義するのは、定義するタイミングが動的になってしまう。
これは静的に決まることよりもコードのメンテナンス性という意味で
悪くなってる。
無名関数を直接引数にするとき以外で
ifの中で関数を生成するってあまりないなぁ。
ifの中で関数を生成するってあまりないなぁ。
画像を読み込むときに何%読み込み完了したか表示してるサイトとかたまにみますけど
あれはどうやってるんですか?
あれはどうやってるんですか?
変数のスコープなんて考えを使ってるから、
セキュリティホールを作り込むんだよ。
全部グローバルにすればいい。
昔の堅牢なシステムは全部それで上手くいってた。
セキュリティホールを作り込むんだよ。
全部グローバルにすればいい。
昔の堅牢なシステムは全部それで上手くいってた。
>>916
それどんなFortranだよ
それどんなFortranだよ
前の方でfunctionの問題が出ていますが
コンストラクタ定義をfunctionでして、そのprototype定義をその後ろでしていたとします
コンストラクタの前でnewしたら、
既にfunctionは定義されているのでインスタンスは生成できますが、
プロトタイプは設定されていないのでおかしくなります
function定義と同じタイミングでプロトタイプも定義する方法はありますか?
コンストラクタ定義をfunctionでして、そのprototype定義をその後ろでしていたとします
コンストラクタの前でnewしたら、
既にfunctionは定義されているのでインスタンスは生成できますが、
プロトタイプは設定されていないのでおかしくなります
function定義と同じタイミングでプロトタイプも定義する方法はありますか?
コンストラクタだけが出来て変になるのを防ぐために
function定義はやめた方がいいってことですよね?
はい論破
function定義はやめた方がいいってことですよね?
はい論破
相当>>780のことを根に持ってるようだね
>>920
よくわからんけど、つまりこういうこと?
変数に関数を代入するやり方では防ぎようがないね。
var Klass = function () {・・・} // コンストラクタ
↑前の方
ここでインスタンス生成
↓後ろ
Klass.prototype.foo = function () {・・・}
よくわからんけど、つまりこういうこと?
変数に関数を代入するやり方では防ぎようがないね。
var Klass = function () {・・・} // コンストラクタ
↑前の方
ここでインスタンス生成
↓後ろ
Klass.prototype.foo = function () {・・・}
>>920
解決策ではないが、
new が実行される前に その function の prototype を freeze しとけば
おかしなことになる前にエラーを吐き出してくれる様になるんではないか
解決策ではないが、
new が実行される前に その function の prototype を freeze しとけば
おかしなことになる前にエラーを吐き出してくれる様になるんではないか
>>920
> コンストラクタ定義をfunctionでして、そのprototype定義をその後ろでしていたとします
> コンストラクタの前でnewしたら、
> 既にfunctionは定義されているのでインスタンスは生成できますが、
> プロトタイプは設定されていないのでおかしくなります
図解しようか?
var klass = new Klass(); // 問題なく動く。(newの中でfooを使っていないならば) なおプロトタイプは後から設定してもよい
function Klass() {・・・} // コンストラクタ
Klass.prototype.foo = function () {・・・}
↓こっちはもっとひどい。
var klass1 = new Klass(); // エラーで落ちる。
var Klass = function () {・・・} // コンストラクタ
var klass2 = new Klass(); // newの中でfooを使っているとどっちみち落ちる。
Klass.prototype.foo = function () {・・・}
> コンストラクタ定義をfunctionでして、そのprototype定義をその後ろでしていたとします
> コンストラクタの前でnewしたら、
> 既にfunctionは定義されているのでインスタンスは生成できますが、
> プロトタイプは設定されていないのでおかしくなります
図解しようか?
var klass = new Klass(); // 問題なく動く。(newの中でfooを使っていないならば) なおプロトタイプは後から設定してもよい
function Klass() {・・・} // コンストラクタ
Klass.prototype.foo = function () {・・・}
↓こっちはもっとひどい。
var klass1 = new Klass(); // エラーで落ちる。
var Klass = function () {・・・} // コンストラクタ
var klass2 = new Klass(); // newの中でfooを使っているとどっちみち落ちる。
Klass.prototype.foo = function () {・・・}
根本的な所で考え方が違っているんだよな
たとえばこういうコード
var a = foo();
function foo() { return 1 }
動くべきか、そうでないか。
たとえばこういうコード
var a = foo();
function foo() { return 1 }
動くべきか、そうでないか。
動いちゃうんですねコレ。知らなかった。
jsファイルがパースされた時点でfooが有効になっていて、
実行時点で利用可能って解釈で合ってる?
jsファイルがパースされた時点でfooが有効になっていて、
実行時点で利用可能って解釈で合ってる?
C言語とかでは動かなくて
前方参照するために、プロトタイプ宣言とかいう
機能が必要になってしまう。
これを不要にした最初の言語は
Javaだろう。すごいね。
前方参照するために、プロトタイプ宣言とかいう
機能が必要になってしまう。
これを不要にした最初の言語は
Javaだろう。すごいね。
>>929
むしろ、なぜ動かないと思ったの?
むしろ、なぜ動かないと思ったの?
異常がある時
「オブジェクトが生成でき、メソッドを使うまで異常に気付かない」
より
「オブジェクトが生成できない」
の方がいい
それがA級プログラマーの発想
「オブジェクトが生成でき、メソッドを使うまで異常に気付かない」
より
「オブジェクトが生成できない」
の方がいい
それがA級プログラマーの発想
JSはメソッドをすげ替えて呼ぶこともできるんだから、どちらにせよメソッド側のチェックも必要。
コンストラクタでは、thisが確実にクラスのインスタンスであり、未初期化なオブジェクトであることを確認して初期化する。
メソッドではthisが確実にクラスのインスタンスであり、初期化済みのオブジェクトであることを確認して扱う。
これが鉄則で、ビルドインAPIでも使われている手法。
コンストラクタでは、thisが確実にクラスのインスタンスであり、未初期化なオブジェクトであることを確認して初期化する。
メソッドではthisが確実にクラスのインスタンスであり、初期化済みのオブジェクトであることを確認して扱う。
これが鉄則で、ビルドインAPIでも使われている手法。
というか適切なprototypeを持っているかどうかってどうやってチェックできるの?
こんな感じになるはず
// lib/private.js
export default const $ = (map => base => {
let priv = map.get(base)
if (!priv) map.set(base, priv = {__proto__: null})
return priv
})(new WeakMap)
~~~~~~
// main.js
import {ASSERT, UTIL} from 'lib/helpers'
import from 'lib/private'
const {$$crate} = Symbol
const Person = UTIL.CLASS_FREEZE(class {
[$$create]() {
let U = undefined・
return Object.assign((super()), {PersonName:U})
}
constructor(name) {
ASSERT.UNINITIALIZED((this), ['PersonName']) // has && undefined
ASSERT.TYPEOF(name, 'srting', {minLength:1, maxLength:100})
(this).PersonName = name
}
getName() {
ASSERT.INITIALIZED((this), ['PersonName']) // has && !undefined
return (this).PersonName
}
})
// lib/private.js
export default const $ = (map => base => {
let priv = map.get(base)
if (!priv) map.set(base, priv = {__proto__: null})
return priv
})(new WeakMap)
~~~~~~
// main.js
import {ASSERT, UTIL} from 'lib/helpers'
import from 'lib/private'
const {$$crate} = Symbol
const Person = UTIL.CLASS_FREEZE(class {
[$$create]() {
let U = undefined・
return Object.assign((super()), {PersonName:U})
}
constructor(name) {
ASSERT.UNINITIALIZED((this), ['PersonName']) // has && undefined
ASSERT.TYPEOF(name, 'srting', {minLength:1, maxLength:100})
(this).PersonName = name
}
getName() {
ASSERT.INITIALIZED((this), ['PersonName']) // has && !undefined
return (this).PersonName
}
})
これねー誰もおらん所で言うのでれむじー。
横綱渡り
剛君が横に出たー?とか
横綱に志賀剛君が出てきた所とか。
お頂いで横綱に食べに行ってるはず。
知らんなら知らんて言ってー。
お前うっとうしーよーいい加減ていうか俺今水男だよーとか
四日市と春日井市の間で車を追い抜いた所。
今の気持ちを大切にね。
かっこいいのになー。
なんでだろうなー。
ネクタイの縛り方
連舞と乱舞
しっしっしっしっしっしっしっし。
俺たち記憶の倉庫ばーん。
僕も中島って言うだよ。
あ、僕の1UPきのこが。
なんでねー俺がお前の疲れ取り?
えー自分で自分の首を絞めてる事に早く気づきましょう。
で、僕が一応ファイナルスターの
横綱渡り
剛君が横に出たー?とか
横綱に志賀剛君が出てきた所とか。
お頂いで横綱に食べに行ってるはず。
知らんなら知らんて言ってー。
お前うっとうしーよーいい加減ていうか俺今水男だよーとか
四日市と春日井市の間で車を追い抜いた所。
今の気持ちを大切にね。
かっこいいのになー。
なんでだろうなー。
ネクタイの縛り方
連舞と乱舞
しっしっしっしっしっしっしっし。
俺たち記憶の倉庫ばーん。
僕も中島って言うだよ。
あ、僕の1UPきのこが。
なんでねー俺がお前の疲れ取り?
えー自分で自分の首を絞めてる事に早く気づきましょう。
で、僕が一応ファイナルスターの
自分ちで2ちゃんできないので今日いったんこれで上がります。
IE10の他の環境でも再現すれば、他の方法を考えたいと思っているので
試してもらえるとありがたいです。
現時点ではプリンタの問題とゆう可能性も捨てきれず、曖昧な状態なので・・・
一応こちらではこの後 window.open()でのコードを作って
試してみようと思ってますm(_ _)m
IE10の他の環境でも再現すれば、他の方法を考えたいと思っているので
試してもらえるとありがたいです。
現時点ではプリンタの問題とゆう可能性も捨てきれず、曖昧な状態なので・・・
一応こちらではこの後 window.open()でのコードを作って
試してみようと思ってますm(_ _)m
iframe側のc.htmlが、本体であるb.htmlのCSSに影響を受けるの?
b.html, c.htmlのCSSを、各b.css, c.cssとすると、
c.htmlのデザインは、c.cssに書けばよいと思う
b.html, c.htmlのCSSを、各b.css, c.cssとすると、
c.htmlのデザインは、c.cssに書けばよいと思う
あるイベントで絶対に実行させたい処理があるときはどうしたらいいですか?
イベント伝播の最上位のdocumentで処理すれば一応できそうですが
その前にstopPropagationされたら止まりますよね?
イベント伝播の最上位のdocumentで処理すれば一応できそうですが
その前にstopPropagationされたら止まりますよね?
>>949
絶対は不可能です
絶対は不可能です
前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
みんなの評価 : 類似してるかもしれないスレッド
- + JavaScript の質問用スレッド vol.113 + (1001) - [97%] - 2014/1/25 12:46
- + JavaScript の質問用スレッド vol.135 + (1002) - [97%] - 2018/11/23 10:30
- + JavaScript の質問用スレッド vol.125 + (1001) - [97%] - 2015/10/7 17:45
- + JavaScript の質問用スレッド vol.119 + (1002) - [97%] - 2014/10/3 15:30
- + JavaScript の質問用スレッド vol.118 + (1002) - [97%] - 2014/8/29 22:30
- + JavaScript の質問用スレッド vol.117 + (1009) - [97%] - 2014/8/5 3:30
- + JavaScript の質問用スレッド vol.116 + (1002) - [97%] - 2014/7/1 0:45
- + JavaScript の質問用スレッド vol.114 + (1001) - [97%] - 2014/5/3 10:45
- + JavaScript の質問用スレッド vol.112 + (1001) - [97%] - 2013/11/27 16:46
- + JavaScript の質問用スレッド vol.111 + (1001) - [97%] - 2013/11/4 6:00
- + JavaScript の質問用スレッド vol.110 + (1001) - [97%] - 2013/10/13 14:01
- + JavaScript の質問用スレッド vol.113 + (1001) - [97%] - 2014/3/15 21:30
- + JavaScript の質問用スレッド vol.105 + (1001) - [97%] - 2013/5/20 4:45
- + JavaScript の質問用スレッド vol.109 + (1001) - [95%] - 2013/10/7 13:16
- + JavaScript の質問用スレッド vol.121 + (1001) - [95%] - 2022/11/29 16:30
- + JavaScript の質問用スレッド vol.126 + (348) - [95%] - 2023/1/12 17:00
- + JavaScript の質問用スレッド vol.100 + (1001) - [95%] - 2012/6/13 22:46
トップメニューへ / →のくす牧場書庫について