例外や事前条件?の考え方についてわからないことがあります。言語はJavaScriptを使っています。
また、自分が調べた言葉や考え方に対する理解が大きく間違っている可能性があります。そこを教えていただきたいです。整理があまりできていないのか文章がおかしなところもあるかもしれませんがお願いします。

事前条件についてわからないこと

自分が調べたところ事前条件というのは関数が正しい処理を行うための前提となる条件だと感じました。
つまりこれは引数に正しい物が渡されているか?ということだと思ったのですが、もし関数内でグローバル変数を使ったり、そもそも関数がメソッドでプロパティを使う。という場合はこのグローバル変数やプロパティも事前条件というのでしょうか?これらのデータは何が責任を持つのでしょうか?

例外とチェックについてわからないこと

例外についても疑問に思いました。例外を投げるかどうかの判断は処理の中で条件をチェックしているように思えます。
それとも例外を投げるかどうかのチェックは条件の確認ではなく、呼び出し側へ例外を投げることで呼び出し側の事前条件の責任を訪ねているということに興味があるということでしょうか?

処理の中にチェックを細かく入れていくのがいいことではないのはなんとなくわかります。
どこかが例外を投げてくれるまで間違った動きをし続けるのを防ぐために例外を自分で作って投げるのだと思っていますが、これを極端に増やすと例外を投げるかどうかのテストをする箇所が増えますし、極端な話NullPointerExceptionでいいはずのところが幾つかさかのぼった呼び出し側でthrow new Error('まだ○○が定義されていません。');に近い無駄なことをしてしまう可能性があるからチェックを細かくしすぎるのは良くないのだと思っています。