変数が被らないか書き方_JS

if (typeof KARAKURE === 'undefined') KARAKURE = {};
if (typeof KARAKURE.JP === 'undefined') KARAKURE.JP = {};
if (typeof KARAKURE.JP.Site === 'undefined') KARAKURE.JP.Site = {};

  /*
    initの被りがないか確認
  */
  KARAKURE.JP.Site.VariableCoverageTest1 = {

    init: function( setting ) {
      if ( setting != null && setting != undefined && typeof setting === "object" ) {
        this.data = setting;
      }
    },

    /*
      test1
    */
    run: function( opt ){
      if(KARAKURE.JP.Site.VariableCoverageTest1.data){
        console.log(KARAKURE.JP.Site.VariableCoverageTest1.data.inite_msg);
      }else{
        console.log(opt.testvalue);
      }

    }
  };

  KARAKURE.JP.Site.VariableCoverageTest2 = {

    init: function( setting ) {
      if ( setting != null && setting != undefined && typeof setting === "object" ) {
        this.data = setting;
      }
    },

    /*
      test2
    */
    run: function( opt ){
      if(KARAKURE.JP.Site.VariableCoverageTest2.data){
        console.log(KARAKURE.JP.Site.VariableCoverageTest2.data.inite_msg);
      }else{
        console.log(opt.testvalue);
      }

    }

  };
<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>JS読み出し</title>

  <script type="text/javascript" src="several_function.js"></script>
</head>
<body>
	<div class="solution__tips">
		テスト
	</div>
  <script>

  (function(){

      KARAKURE.JP.Site.VariableCoverageTest1.init({
        'inite_msg' : 'inite1の値'
      });

      KARAKURE.JP.Site.VariableCoverageTest1.run({
	    'testvalue': 'テスト1',
      });


      KARAKURE.JP.Site.VariableCoverageTest2.run({
	    'testvalue': 'テスト2',
      });
      KARAKURE.JP.Site.VariableCoverageTest2.init({
        'inite_msg' : 'inite2の値'
      });
      KARAKURE.JP.Site.VariableCoverageTest2.run({
	    'testvalue': 'テスト2',
      });

      KARAKURE.JP.Site.VariableCoverageTest1.run({
	    'testvalue': 'テスト1',
      });

  })();
  </script>
</body>
</html>