0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

関数オブジェクト記法は関数定義記法に置き換えられない場合がある???

Posted at

本内容を利用した場合の一切の責任を私は負いません。

「関数オブジェクト記法」、「関数定義記法」は自分が勝手につけた名称です。
定義も厳密にどうとも言えません。
簡単に言えば、

  • 関数オブジェクト記法
    関数に、引き数のとこにfunctionから始まる関数定義を書く書き方
    (コールバックを必要とする関数でよくある。)

func1(
    function()
    {
    });

  • 関数定義記法
    一般的な、スコープ等に含まれない書き方

function()
{
}

困ったのは下記です。

a.htm

<!DOCTYPE html>
<html>
    <head>
        <title>怪しいコールバック</title>
        <script src="a.js"></script>
    </head>
    <body>
        <input type="button" value="root1" onclick="root1();">
        <input type="button" value="root2" onclick="root2();">
    </body>
</html>

a.js

/**
* p2という外部パッケージのコールバックを使用する関数を想定。
* 中身を書いているが、本来はわからなかったり、変更できなかったりするもの。
* @constructor
*/
function p2func(func)
{
    func();
}

/**
* p1という外部パッケージのコールバックを使用する関数を想定。
* 中身を書いているが、本来はわからなかったり、変更できなかったりするもの。
* @constructor
*/
function p1func(func)
{
    func();
}

/**
* [関数オブジェクト記法]パッケージのメソッドを使用するコード
* argをコールバックに渡すことができる。
* @constructor
*/
function root1()
{
    let arg = 1;
    p1func(
        function()
        {
            p2func(
                function()
                {
                    console.log(arg);
                }
            );
        }
    );
}

/**
* [関数定義記法]パッケージのメソッドを使用するコード
* まずはp2funcのコールバックを関数定義記法にできるか。
* 辛うじてこれはできたが定義が関数内。。。
* もう1つ、これをjsdocにかけてもコールバックは認識されない。
* 外に定義する方法は無い???
* @constructor
*/
function root2()
{
    let arg = 1;
    p1func(
        function()
        {
            p2func(p2callback);

            /**
            * p2funcのコールバック
            * @constructor
            */
            function p2callback()
            {
                console.log(arg);
            }
        }
    )
}

もしもスマートな方法が本当に無いんだとしたら、コールバックでその辺にある変数を使わない方がいいかも。
(置き換えれないため、縛りが多く、融通が利かなくなる可能性がある。)
そもそもコールバックなので、本質的にそこにあるものを使わないのは当然という気もするけど。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?