質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CoffeeScript

CoffeeScriptはプログラミング言語です。シンタックスシュガーの導入により、JavaScriptのコードに変換された後動作します。JavaScriptに比べ、可読性と簡潔性が向上しています。

Q&A

解決済

1回答

1910閲覧

coffeescriptの即時関数について、変数格納し引数を持ちたい場合

sakadon

総合スコア7

CoffeeScript

CoffeeScriptはプログラミング言語です。シンタックスシュガーの導入により、JavaScriptのコードに変換された後動作します。JavaScriptに比べ、可読性と簡潔性が向上しています。

0グッド

0クリップ

投稿2016/01/28 04:00

編集2016/01/28 04:02

以下の様な外から叩ける関数を持ちたい。

即時関数として1度最初に動いて欲しいが、あとから動いてもらうために叩くことがあるので外に出しておきたい。また、引数を与えたいが、初回起動時は無いのでデフォルト引数をつけておく。また内部はjQueryを使うのでjQuery.readyまで待つために$ ->で囲っておく。

coffeescript

1@globalFunc = do ( hoge = '#hoge', fuga = '#fuga' ) -> 2 $ -> 3 $(hoge).animate({~}) 4 console.log hoge+' and '+fuga

この場合、初回は問題なく動く。が、他のjsやコンソールから叩いた場合、jQueryの評価結果がかえってくるが、中に入ったアニメーションは動かない。

> globalFunc <- [#document] > globalFunc() <- Uncaught TypeError: globalFunc is not a function(…) > globalFunc( 'header', 'fuu' ) <- VM3695:2 Uncaught TypeError: globalFunc is not a function(…)

どうやら do を使う時点で無名関数でラッピングされてしまうのが問題のようなのですが、この欲求を叶えるステキな書き方があれば教えて下さい。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

@globalFuncに代入してから実行する形にすればいいでしょう。

# doのあとのカッコがないと、デフォルト引数が最初の実行にしか適用されない do (@globalFunc = ( hoge = '#hoge', fuga = '#fuga' ) -> $ -> $(hoge).animate({~}) console.log hoge+' and '+fuga )

なお、CofeeScriptの公式サイトで、「Try CoffeeScript」から動的変換ができます。

投稿2016/01/28 04:13

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sakadon

2016/01/28 05:05

ありがとうございます! > # doのあとのカッコがないと、デフォルト引数が最初の実行にしか適用されない 仕方ないんですかね、、確かにカッコがないとデフォルト引数の処理が抜け落ちますね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問