これは「関数が副作用を持たない」という観点から、計算を中心とする言語では望ましい動作といえる。またそもそも代入概念のない関数型言語では、引数は必ず値で渡されると考えられる（ただし、代入が存在しない以上コピーをとる必要もない）。
ポインタ渡し.
名前渡し.
次のような例は名前渡しに特徴的な動作と言われる。
このような複雑さもあって、ALGOL以外で名前渡しが採用された事例はほとんどない。
変数渡し.
変数渡し（へんすうわたし、）は、変数そのもの（左辺値）を渡す方法で、この場合は仮引数に対する操作がそのまま実引数（渡された変数）に影響する。
多くの言語では（とくに配列のようなデータ構造を戻り値にできない場合）戻り値はひとつの値だけしか返せないが、データベース検索などで見つかったかどうかと、見つかったならその値も知らせるような場合に、見つかったかどうかを戻り値にして、検索結果の値は適当な引数を変更するといった使い方ができる。
原始的な言語であるFORTRANは機械語のアドレス操作を反映した参照渡ししか持たなかった。これは特にcall by indexと呼ばれている。
値渡しによる引数の変更.
しかしこれは、実際の変数領域を逸脱した部分をも参照できるので、あくまでも値渡しによる参照渡しのエミュレートである。参照渡しをサポートする言語でも内部的には同様の操作を行っているが、それは何らかの意味で言語の保護下にある参照となる。
参照の値渡し.
例：Pascalの変数渡し.
遅延評価.
ボックス化
ボックス化（）とは、プログラミング言語において値型をオブジェクト型（参照型）に変換すること。逆に、ボックス化されたオブジェクトを値型に戻すことをボックス化解除（）と呼ぶ。
概要.