返された関数が実行されると時は定義時の変数であるstoreを返します(getter)

・どの行が該当しているのでしょうか?

function gettersetter(store) {
        function prop() {
            if (arguments.length) store = arguments[0]
            return store
        }

        prop.toJSON = function () {
            if (store && isFunction(store.toJSON)) return store.toJSON()
            return store
        }

        return prop
}

引用元ページ
GitHub


prop関数

if (arguments.length) store = arguments[0]

・「関数呼び出し時に渡された引数の数」があれば、「引数として渡されたstore」へ、1つめの引数を代入?
・どういう意味でしょうか?
・この部分がsetter?


prop.toJSON関数
・この関数はどこから呼ばれるているのでしょうか?
・storeがtrueで、store.toJSONが関数だったら、store.toJSON()を返す?
・それ以外なら、storeを返す?

prop.toJSON = function () {
            if (store && isFunction(store.toJSON)) return store.toJSON()
            return store
        }

追記
・getterは下記ですか?

function prop() {
    //if (arguments.length) store = arguments[0]
    return store
}

・gettersetter関数を定義後「その戻り値である関数」を呼び出すということは、setterだろうがgetterrだろうが、実際はprop関数を呼び出しているだけ、ということでしょうか?
・prop.toJSON関数が呼び出されるのは、JSON.stringify から呼び出された時だけなので、上記処理とは全く関係ない、ということ?