このバージョンのヘルプはこれ以降更新されません。最新のヘルプは https://www.jmp.com/support/help/ja/15.2   からご覧いただけます。


JSLでは、ローカル変数を引数とした関数を作成することもできます。関数は、Function関数によって作成されます。関数の作成は、マクロの概念を拡張したものと言えます。例として、平方根を求める関数を作成します。その関数では引数が負の場合はエラーではなくゼロを戻すようにします。まず、中括弧{ }を使ってローカル引数のリストを指定してから、式を直接入力します。Functionで指定した式はその場では評価されず、式として保存されるため、Exprで式を囲む必要はありません。
myRoot = Function( {x},
	If( x > 0, Sqrt( x ), 0 )
);
a = myRoot( 4 );  // aは2となる
b = myRoot( -1 ); // bは0となる
関数を定義した場合、関数内部の式そのものにアクセスすることはできません。これはName Exprコマンドを使用しても同様です。関数内部の式にアクセスするには、その関数全体をexpr()節の中に入れる必要があります。例:
makeFunction = Expr(
	myRoot = Function( {x},
		If( x > 0, Sqrt( x ), 0 )
	)
);
d = Substitute( Name Expr( MakeFunction ), Expr( x ), Expr( y ) );
Show( d );
makeFunction;
f1 = Function( {x, y, z}); // すべての引数が必須
f2 = Function( {x, y=2, z=4}); // xが必須、yとzはオプション
メモ:  
   Function( {x = 1, y}, ... )
ex = Function( {x, y = 2, z = 3},
	Return( x + y + z )
);
ex( 1, 4 ); // xに1、yに4が渡され、zは3になるため、 8を戻す
functionName=Function({arg1, ...}, body);
functionName=Function({arg1, ...}, {Default Local}, body);
Default Localは、以下のような名前をローカルにします。
それらの後に括弧なしで続く名前(たとえばname(...)という形式でないもの)
add3 = Function( {a, b, c},
	{temp},
	temp = a + b;
	temp + c;
);
X = add3( 1, 5, 9 );
add3 = Function( {a, b, c},
	{Default Local},
	temp = a + b;
	temp + c;
);
X = add3( 1, 5, 9 );
どちらの場合も、変数tempはグローバル変数ではなく、たとえ関数の外で同じ名前の変数がグローバル変数として設定されていても、そのグローバル変数は関数の実行に影響されません。
ユーザ定義の関数内でDefault Localを使用した場合、コンテキストによって動作が異なるため、混乱を招く場合があります。つまり、同名の変数がスコープの中と外に存在する場合、同じ関数でも動作が異なる可能性があります。ユーザは、ローカルにしたい変数をすべて列挙する必要があります。そうすれば、スコープの外にある変数の値についての混乱や誤りを最小限に抑えることができます。