JavaScriptにおいて関数はオブジェクトのようなものであると習ったのですが、
例えば関数を引数として渡す際に()をつければ即実行
そうでなければオブジェクトのみを渡すと言う認識なのですが
例えばsetIntervalなどでは関数に()をつけたものをダブルコーテーションで囲わないといけないですが、これはどう言う意味を持つのでしょうか?
私の認識に誤りがございましたら御指摘を願いたいです。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
setInterval
これは古い書き方を互換性のためにのこしてあるだけで
あくまでも例外的な処理だと理解してください
投稿2020/02/04 07:42
総合スコア116724
0
ベストアンサー
JavaScriptにおいて関数はオブジェクトのようなものであると習ったのですが、
ようなものではなくオブジェクトです。
(オブジェクトの一種で、Functionオブジェクトとなる)
詳しくは下記をご覧ください。
例えば関数を引数として渡す際に()をつければ即実行
そうでなければオブジェクトのみを渡すと言う認識なのですが
前者が少し違います。
()で即時実行した際は、その引数に入れた関数が返す値が、引数に渡されます。
後者は、だいたいその認識で合っていると思います。
例えばsetIntervalなどでは関数に()をつけたものをダブルコーテーションで囲わないといけないですが、これはどう言う意味を持つのでしょうか?
WindowOrWorkerGlobalScope.setTimeout() - Web API | MDN
の通りです。
記載の通り、文字列を与えるのは、eval
と同じような実行になるため、推奨されていないようですね。
(文字列をスクリプトコードとして評価する = 攻撃を受けやすくなる・セキュリティホールになりやすい)
参考記事は、setTimeout
ですが、setInterval
も同様かと思われます。
投稿2020/02/04 08:09
編集2020/02/04 08:38総合スコア9555
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/04 08:30
0
JavaScriptにおいて関数はオブジェクトのようなものであると習ったのです
JavaScriptはオブジェクト指向言語ですから関数はオブジェクトですよ。
はいそこ、全く分かってませんね?
軽く解説しましょう。
オブジェクト指向言語に於けるオブジェクトというのは、
生物を分類するのに背骨のある無しで「脊椎動物」と「無脊椎動物」に分けた。
それと同じレベルです。
JavaScriptに於いて配列も関数もDateも皆オブジェクトです。
この時のオブジェクトというのはメソッドやプロパティが生えてて活用出来るという意味です。
js
1> 'ねこ'.charAt(1) 2// 'こ'
文字列の"ねこ"
にcharAt
なんてメソッド何時定義したんだ!?
JavaScriptのString型はcharAtというメソッドを所持しているという決まりがあるから使えるんです。
関数は確かに根っこはオブジェクトであり、Object型からの派生です。
ほら、メソッドやプロパティもちゃんとあるでしょ?
しかし魔改造しまくって似ても似つかぬ作りになり、
function() {}
みたいな大本からかけ離れた専用の構文まで用意されている全くの別物です。
setIntervalはyambejpさんの回答で完成されているので割愛します。
投稿2020/02/04 09:14
総合スコア21203
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/04 09:29
0
関数は状態を持ちません。なので、同じ引数を与えられると、常に同じ値を返します。
オブジェクトは、変数やメソッドをメンバーとして持ちえますので、それらの値が状態を構成します。変数やメソッドの値は、状態によって影響を受けます。
状態を持つか、状態を持たないか、というのは非常に重要な性質なので、注意してください。
「関数はオブジェクトのようなもの」というのが、何を根拠にして、誰が言ったのか知りませんが、正しくありません!
投稿2020/02/04 08:19
総合スコア6915
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/04 08:40 編集
2020/02/04 09:06
2020/02/04 14:21 編集
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。