本内容を利用した場合の一切の責任を私は負いません。
「関数オブジェクト記法」、「関数定義記法」は自分が勝手につけた名称です。
定義も厳密にどうとも言えません。
簡単に言えば、
- 関数オブジェクト記法
関数に、引き数のとこに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);
}
}
)
}
もしもスマートな方法が本当に無いんだとしたら、コールバックでその辺にある変数を使わない方がいいかも。
(置き換えれないため、縛りが多く、融通が利かなくなる可能性がある。)
そもそもコールバックなので、本質的にそこにあるものを使わないのは当然という気もするけど。