YYPOST群发软件 发表于 2026-4-28 06:32:17

安卓脚本示例POST和GET变量方法的实际应用

安卓脚本示例POST和GET变量方法的实际应用




/**
* 主脚本.js - 卡密管理系统完整示例
* 基于安卓POST 和 GET 方法的实际应用
* 适用本文档 ES5 系统安卓 JavaScript 引擎 Rhino
*/

// =============================================================================
// 0. 日志桥接配置(将 printl 重定向到 console.log)
// =============================================================================

// 强制将 printl 重定向到 console.log,以便 LogBridge 能捕获日志
var originalPrintl = (typeof printl !== 'undefined') ? printl : null;
printl = function(message) {
    // 同时输出到 console.log(会被 LogBridge 捕获到 H5)
    if (typeof console !== 'undefined' && typeof console.log === 'function') {
      console.log(message);
    }
    // 如果原来有 printl,也调用它(保留原始功能)
    if (originalPrintl) {
      originalPrintl(message);
    }
};

// =============================================================================
// 1. 配置常量
// =============================================================================

var API_BASE_URL = "http://api.autoapp.net.cn:1089";
var APK_ORDER_URL = "http://api.autoapp.net.cn:1088";
var ADMIN_USERNAME = "mm258";      // 测试账号
var ADMIN_PASSWORD = "fhdg148q";   // 测试密码

// =============================================================================
// 2. 获取 Token
// =============================================================================

/**
* 获取管理 token
* API: http://api.autoapp.net.cn:1089/token?username=ak123&password=123456&validateCode=1&rememberMe=false
* @returns {String|null} 返回 token 或 null
*/
function getToken() {
    try {
      var http = new okHttp();
      
      // 设置请求头
      http.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36");
      http.setHeader("Content-Type", "application/x-www-form-urlencoded");
      
      // 构建请求 URL
      var url = API_BASE_URL + "/token?username=" + ADMIN_USERNAME +
                  "&password=" + ADMIN_PASSWORD +
                  "&validateCode=1&rememberMe=false";
      
      printl("正在获取 token...");
      printl("请求 URL: " + url);
      var response = http.get(url);
      printl("获取 token 响应:" + response);
      
      // 解析 JSON 响应
      var jsonObj = JSON.parse(response);
      
      if (jsonObj.code === 0) {
            var token = jsonObj.msg;// msg 字段就是 token
            printl("✓ Token 获取成功:" + token);
            return token;
      } else {
            printl("✗ Token 获取失败,错误码:" + jsonObj.code);
            return null;
      }
    } catch (e) {
      printl("✗ 获取 Token 时发生异常:" + e);
      return null;
    }
}

// =============================================================================
// 3. 换机接口
// =============================================================================

/**
* 换机激活
* API: http://api.autoapp.net.cn:1088/apkOrder/exitActivateNew?CardCode=卡密&imei=机器码
* @param {String} cardCode 卡密
* @param {String} imei 设备 IMEI(通过 device.getIMEI() 获取)
* @returns {Boolean} 是否成功
*/
function activateNewDevice(cardCode, imei) {
    try {
      var http = new okHttp();
      
      // 设置请求头
      http.setHeader("User-Agent", "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N)");
      
      // 构建换机接口 URL(注意:参数名是 CardCode,大写C)
      var url = APK_ORDER_URL + "/apkOrder/exitActivateNew?CardCode=" + cardCode + "&imei=" + imei;
      
      printl("=== 换机激活 ===");
      printl("卡密:" + cardCode);
      printl("IMEI: " + imei);
      printl("请求 URL: " + url);
      
      var response = http.get(url);
      printl("换机响应:" + response);
      
      // 根据实际响应判断是否成功
      if (response && response.indexOf("success") !== -1) {
            printl("✓ 换机激活成功");
            return true;
      } else {
            printl("✗ 换机激活失败");
            return false;
      }
    } catch (e) {
      printl("✗ 换机激活异常:" + e);
      return false;
    }
}

// =============================================================================
// 4. 发卡接口
// =============================================================================

/**
* 添加新卡密
* API: http://api.autoapp.net.cn:1089/system/activatecardv2/addCard?token=xxx&card=t23432&cardType=day&devices=1&remarks=
* @param {String} token 管理 token(通过 getToken() 获取)
* @param {String} card 卡密(必须大于5位,开头必须字母)
* @param {String} cardType 卡类型(day天卡/month月卡/quarter季卡/halfYear半年卡/year年卡)
* @param {Number} devices 设备数量
* @param {String} remarks 备注信息
* @returns {Boolean} 是否成功
*/
function addCard(token, card, cardType, devices, remarks) {
    try {
      var http = new okHttp();
      
      // 设置请求头
      http.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)");
      http.setHeader("Content-Type", "application/json");
      
      // 构建 URL
      var url = API_BASE_URL + "/system/activatecardv2/addCard?token=" + token +
                  "&card=" + card +
                  "&cardType=" + cardType +
                  "&devices=" + devices +
                  "&remarks=" + remarks;
      
      printl("=== 添加卡密 ===");
      printl("卡密:" + card);
      printl("类型:" + cardType);
      printl("设备数:" + devices);
      printl("备注:" + remarks);
      
      var response = http.get(url);
      printl("发卡响应:" + response);
      
      // 尝试解析 JSON 响应
      try {
            var jsonObj = JSON.parse(response);
            if (jsonObj.code === 0 || jsonObj.success === true) {
                printl("✓ 卡密添加成功");
                return true;
            } else {
                printl("✗ 卡密添加失败");
                return false;
            }
      } catch (e) {
            // 如果不是 JSON,检查响应文本
            if (response && response.indexOf("success") !== -1) {
                printl("✓ 卡密添加成功");
                return true;
            } else {
                printl("✗ 卡密添加失败");
                return false;
            }
      }
    } catch (e) {
      printl("✗ 添加卡密异常:" + e);
      return false;
    }
}

// =============================================================================
// 5. 续费接口
// =============================================================================

/**
* 续费卡密
* API: http://api.autoapp.net.cn:1089/system/activatecardv2/editCard?token=xxx&card=t23432&cardType=day&devices=1&remarks=
* @param {String} token 管理 token(通过 getToken() 获取)
* @param {String} card 卡密(必须大于5位,开头必须字母)
* @param {String} cardType 卡类型(day天卡/month月卡/quarter季卡/halfYear半年卡/year年卡)
* @param {Number} devices 设备数量
* @param {String} remarks 备注
* @returns {Boolean} 是否成功
*/
function renewCard(token, card, cardType, devices, remarks) {
    try {
      var http = new okHttp();
      
      // 设置请求头
      http.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)");
      http.setHeader("Content-Type", "application/json");
      
      // 构建 URL
      var url = API_BASE_URL + "/system/activatecardv2/editCard?token=" + token +
                  "&card=" + card +
                  "&cardType=" + cardType +
                  "&devices=" + devices +
                  "&remarks=" + remarks;
      
      printl("=== 续费卡密 ===");
      printl("卡密:" + card);
      printl("类型:" + cardType);
      printl("设备数:" + devices);
      
      var response = http.get(url);
      printl("续费响应:" + response);
      
      // 尝试解析 JSON 响应
      try {
            var jsonObj = JSON.parse(response);
            if (jsonObj.code === 0 || jsonObj.success === true) {
                printl("✓ 卡密续费成功");
                return true;
            } else {
                printl("✗ 卡密续费失败");
                return false;
            }
      } catch (e) {
            if (response && response.indexOf("success") !== -1) {
                printl("✓ 卡密续费成功");
                return true;
            } else {
                printl("✗ 卡密续费失败");
                return false;
            }
      }
    } catch (e) {
      printl("✗ 续费卡密异常:" + e);
      return false;
    }
}

// =============================================================================
// 6. 查询卡密信息
// =============================================================================

/**
* 查询卡密详细信息
* API: http://api.autoapp.net.cn:1089/system/activatecardv2/info?token=xxx&card=t23432
* @param {String} token 管理 token(通过 getToken() 获取)
* @param {String} card 卡密
* @returns {Object|null} 卡密信息对象或 null
*/
function getCardInfo(token, card) {
    try {
      var http = new okHttp();
      
      // 设置请求头
      http.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)");
      
      // 构建 URL
      var url = API_BASE_URL + "/system/activatecardv2/info?token=" + token + "&card=" + card;
      
      printl("=== 查询卡密信息 ===");
      printl("卡密:" + card);
      
      var response = http.get(url);
      printl("查询响应:" + response);
      
      // 解析 JSON 响应
      var jsonObj = JSON.parse(response);
      
      if (jsonObj.code === 0) {
            printl("✓ 查询成功");
            printl("卡密信息:" + JSON.stringify(jsonObj.data));
            return jsonObj.data;
      } else {
            printl("✗ 查询失败");
            return null;
      }
    } catch (e) {
      printl("✗ 查询卡密信息异常:" + e);
      return null;
    }
}

// =============================================================================
// 7. 查询卡密设备列表
// =============================================================================

/**
* 查询卡密绑定的设备列表
* API: http://api.autoapp.net.cn:1089/system/activatecardv2/devices?token=xxx&card=t23432
* @param {String} token 管理 token(通过 getToken() 获取)
* @param {String} card 卡密
* @returns {Array|null} 设备列表或 null
*/
function getCardDevices(token, card) {
    try {
      var http = new okHttp();
      
      // 设置请求头
      http.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)");
      
      // 构建 URL
      var url = API_BASE_URL + "/system/activatecardv2/devices?token=" + token + "&card=" + card;
      
      printl("=== 查询设备列表 ===");
      printl("卡密:" + card);
      
      var response = http.get(url);
      printl("设备列表响应:" + response);
      
      // 解析 JSON 响应
      var jsonObj = JSON.parse(response);
      
      if (jsonObj.code === 0) {
            printl("✓ 查询成功");
            var devices = jsonObj.data || jsonObj.list || [];
            printl("设备数量:" + devices.length);
            
            // 遍历显示设备信息
            for (var i = 0; i < devices.length; i++) {
                printl("设备" + (i+1) + ": " + JSON.stringify(devices));
            }
            
            return devices;
      } else {
            printl("✗ 查询失败");
            return null;
      }
    } catch (e) {
      printl("✗ 查询设备列表异常:" + e);
      return null;
    }
}

// =============================================================================
// 8. 综合示例 - 完整业务流程
// =============================================================================

/**
* 完整业务流程演示
*/
function mainWorkflow() {
    printl("========================================");
    printl("    卡密管理系统 - 完整工作流程演示");
    printl("========================================");
   
    // 步骤 1: 获取 Token
    var token = getToken();
    if (!token) {
      printl("✗ 无法获取 token,流程终止");
      return;
    }
   
    // 步骤 2: 添加新卡密
    var newCard = "t2026040001";
    var success = addCard(token, newCard, "month", 2, "测试卡密");
    if (success) {
      printl("✓ 新卡密创建成功:" + newCard);
    } else {
      printl("✗ 新卡密创建失败");
    }
   
    // 步骤 3: 查询卡密信息
    var cardInfo = getCardInfo(token, newCard);
    if (cardInfo) {
      printl("✓ 卡密信息查询成功");
    }
   
    // 步骤 4: 查询设备列表
    var devices = getCardDevices(token, newCard);
    if (devices !== null) {
      printl("✓ 设备列表查询成功");
    }
   
    // 步骤 5: 续费卡密
    var renewSuccess = renewCard(token, newCard, "quarter", 3, "续费为季卡");
    if (renewSuccess) {
      printl("✓ 卡密续费成功");
    }
   
    // 步骤 6: 换机激活示例
    var currentImei = device.getIMEI();
    var testCard = "t2026040002";
    var activateSuccess = activateNewDevice(testCard, currentImei);
    if (activateSuccess) {
      printl("✓ 换机激活成功");
    }
   
    printl("========================================");
    printl("    工作流程演示完成");
    printl("========================================");
}

// =============================================================================
// 9. 实用工具函数
// =============================================================================

/**
* 批量创建卡密
* @param {String} token 管理 token
* @param {String} prefix 卡密前缀
* @param {Number} count 创建数量
* @param {String} cardType 卡类型
* @param {Number} devices 设备数
*/
function batchCreateCards(token, prefix, count, cardType, devices) {
    printl("=== 批量创建卡密 ===");
    printl("前缀:" + prefix);
    printl("数量:" + count);
    printl("类型:" + cardType);
   
    var successCount = 0;
    var failCount = 0;
   
    for (var i = 0; i < count; i++) {
      // 生成卡密:前缀 + 时间戳后 6 位
      var timestamp = new Date().getTime().toString().substr(-6);
      var cardCode = prefix + timestamp + String(i).padStart(3, '0');
      
      printl("正在创建第 " + (i+1) + " 个卡密:" + cardCode);
      
      if (addCard(token, cardCode, cardType, devices, "批量创建")) {
            successCount++;
      } else {
            failCount++;
      }
      
      // 避免请求过快,暂停 100ms
      sleep(100);
    }
   
    printl("=== 批量创建结果 ===");
    printl("成功:" + successCount + " 个");
    printl("失败:" + failCount + " 个");
}

/**
* 检查卡密状态
* @param {String} token 管理 token
* @param {String} card 卡密
* @returns {Object} 卡密状态信息
*/
function checkCardStatus(token, card) {
    var info = getCardInfo(token, card);
   
    if (!info) {
      return {
            valid: false,
            message: "卡密不存在或查询失败"
      };
    }
   
    // 根据实际响应结构调整判断逻辑
    return {
      valid: true,
      info: info,
      message: "卡密有效"
    };
}

// =============================================================================
// 10. JavaScript 变量综合示例(基于文档说明)
// =============================================================================

/**
* JavaScript 变量基础示例 - 严格按照文档说明
* 演示变量的基本概念、声明、赋值和使用
*/
function variableBasicsExample() {
    printl("========================================");
    printl("    JavaScript 变量基础示例");
    printl("========================================");
   
    // 1. 基本变量声明和算术运算(文档第3-11行)
    var x = 5;
    var y = 6;
    var z = x + y;
    printl("【基本变量】x=" + x + ", y=" + y + ", z=x+y=" + z);
    printl("说明:变量就像代数中的字母,用于存储数据");
   
    // 2. 变量命名规则(文档第13-19行)
    var age = 25;            // 描述性名称
    var sum = 100;             // 描述性名称
    var totalVolume = 500;   // 驼峰命名
    var _private = "私有";   // 下划线开头(不推荐)
    var $special = "特殊";   // $开头(不推荐)
    printl("【变量命名】age=" + age + ", sum=" + sum + ", totalVolume=" + totalVolume);
    printl("注意:变量名区分大小写,y 和 Y 是不同的变量");
   
    // 3. 数据类型 - 数字和字符串(文档第21-30行)
    var pi = 3.14;             // 数值,不用引号
    var person = "John Doe";   // 字符串,用双引号
    var answer = 'Yes I am!';// 字符串,用单引号
    var wrongNumber = "100";   // 这是字符串,不是数字!
    printl("【数据类型】");
    printl("数值 pi=" + pi + " (类型: " + typeof pi + ")");
    printl("字符串 person=" + person + " (类型: " + typeof person + ")");
    printl("字符串形式的数字 wrongNumber=" + wrongNumber + " (类型: " + typeof wrongNumber + ")");
   
    // 4. 常量声明(文档第27-28行)
    const PI_CONSTANT = 3.141592653589793;
    printl("【常量】PI_CONSTANT=" + PI_CONSTANT);
    printl("说明:const 表示常量,值不能修改");
   
    // 5. 声明变量但不赋值(文档第32-40行)
    var carname;               // 声明但未赋值
    printl("【未初始化变量】carname=" + carname + " (值为 undefined)");
    carname = "Volvo";         // 后续赋值
    printl("赋值后 carname=" + carname);
   
    // 6. 一条语句声明多个变量(文档第42-48行)
    var lastname = "Doe", age2 = 30, job = "carpenter";
    printl("【多变量声明】lastname=" + lastname + ", age=" + age2 + ", job=" + job);
   
    var a, b, c = 1;
    printl("部分初始化:a=" + a + " (undefined), b=" + b + " (undefined), c=" + c);
}

/**
* 变量作用域示例 - 全局变量和局部变量(文档第62-76行)
*/
function variableScopeExample() {
    printl("========================================");
    printl("    变量作用域示例");
    printl("========================================");
   
    // 全局变量(文档第62-67行)
    var carName = "Volvo";
    printl("【全局变量】在函数外声明: carName=" + carName);
   
    function myFunction() {
      // 这里可以使用全局变量 carName
      printl("函数内部访问全局变量: carName=" + carName);
      
      // 局部变量(文档第70-76行)
      var localCarName = "BMW";
      printl("函数内部声明局部变量: localCarName=" + localCarName);
    }
   
    myFunction();
    printl("【注意】在函数外无法访问局部变量 localCarName");
   
    // 演示全局变量可以在任何地方使用
    printl("函数执行后仍可访问全局变量: carName=" + carName);
}

/**
* 块级作用域示例 - let 和 const(文档第79-107行)
*/
function blockScopeExample() {
    printl("========================================");
    printl("    块级作用域示例 (let/const)");
    printl("========================================");
   
    // 1. var 不具备块级作用域(文档第80-81行)
    printl("【var 的作用域】");
    {
      var x = 2;
      printl("在代码块内声明 var x=" + x);
    }
    printl("在代码块外仍可访问: x=" + x + " (var 没有块级作用域)");
   
    // 2. let 具备块级作用域(文档第83-85行)
    printl("【let 的作用域】");
    {
      let y = 3;
      printl("在代码块内声明 let y=" + y);
    }
    printl("在代码块外无法访问 let y (会报错)");
   
    // 3. 重新定义变量的对比(文档第87-99行)
    printl("【重新定义变量对比】");
    var a = 10;
    printl("var a=10 (外部)");
    {
      var a = 2;// 这会覆盖外部的 a
      printl("var a=2 (内部块)");
    }
    printl("块执行后 a=" + a + " (被内部覆盖了)");
   
    var b = 10;
    printl("var b=10 (外部)");
    {
      let b = 2;// 这是新的块级变量,不影响外部
      printl("let b=2 (内部块)");
    }
    printl("块执行后 b=" + b + " (保持原值,未被影响)");
   
    // 4. 循环中的作用域(文档第101-107行)
    printl("【循环中的作用域】");
    var i = 5;
    for (var i = 0; i < 3; i++) {
      // 循环中使用 var
    }
    printl("使用 var: 循环后 i=" + i + " (循环影响了外部变量)");
   
    var j = 5;
    for (let j = 0; j < 3; j++) {
      // 循环中使用 let
    }
    printl("使用 let: 循环后 j=" + j + " (外部变量未受影响)");
}

/**
* 变量重新声明和重置示例(文档第109-147行)
*/
function variableRedeclarationExample() {
    printl("========================================");
    printl("    变量重新声明和重置");
    printl("========================================");
   
    // 1. 局部变量:var 和 let 类似(文档第109-115行)
    printl("【函数内的局部变量】");
    function testVar() {
      var carName = "Volvo";
      printl("var 声明: carName=" + carName);
    }
    function testLet() {
      let carName = "Volvo";
      printl("let 声明: carName=" + carName);
    }
    testVar();
    testLet();
    printl("两者在函数内都是局部作用域");
   
    // 2. 全局变量:var 和 let 类似(文档第117-123行)
    printl("【全局变量】");
    var globalX = 2;
    let globalY = 2;
    printl("var globalX=" + globalX + " (全局作用域)");
    printl("let globalY=" + globalY + " (全局作用域)");
   
    // 3. 重置变量(文档第124-147行)
    printl("【变量重置规则】");
   
    // var 可以多次声明
    var m = 2;
    var m = 3;// 合法
    printl("var m=2; var m=3; → m=" + m + " (合法)");
   
    // let 不能在同一作用域重复声明
    var n = 2;
    // let n = 3;// 不合法!会报错
    printl("var n=2; let n=3; → 不合法(同一作用域)");
   
    // 在不同块中可以
    let p = 2;
    printl("let p=2 (外部)");
    {
      let p = 3;// 合法,不同块
      printl("{ let p=3 } (内部块,合法)");
    }
    printl("外部 p=" + p + " (未被影响)");
   
    // let 和 var 不能混用
    let q = 2;
    // var q = 3;// 不合法
    printl("let q=2; var q=3; → 不合法(同一作用域)");
}

/**
* const 关键字详解(文档第155-214行)
*/
function constKeywordExample() {
    printl("========================================");
    printl("    const 关键字详解");
    printl("========================================");
   
    // 1. const 必须初始化(文档第156-171行)
    printl("【const 基本规则】");
    const PI = 3.141592653589793;
    printl("const PI=" + PI + " (正确:声明时初始化)");
   
    // const PI2;// 错误!const 必须初始化
    // PI2 = 3.14;// 这样也不行
    printl("const PI2; → 错误(const 必须初始化)");
   
    // 2. const 不能重新赋值(文档第156-157行)
    printl("【const 不可重新赋值】");
    const MAX_VALUE = 100;
    printl("const MAX_VALUE=" + MAX_VALUE);
    // MAX_VALUE = 200;// 报错!
    // MAX_VALUE = MAX_VALUE + 10;// 报错!
    printl("MAX_VALUE=200; → 报错(const 不能重新赋值)");
   
    // 3. const 和 let 的区别(文档第159-164行)
    printl("【const vs let】");
    printl("相同点:都是块级作用域");
    printl("相同点:都不能和同作用域其他变量同名");
    printl("不同点:const 必须初始化,let 不用");
    printl("不同点:const 不能重新赋值,let 可以");
   
    // 4. const 并非真正的常量 - 对象和数组可变(文档第173-188行)
    printl("【const 的本质:常量引用,非常量值】");
   
    // 对象示例
    const car = {type:"Fiat", model:"500", color:"white"};
    printl("const car = " + JSON.stringify(car));
    car.color = "red";      // 可以修改属性
    car.owner = "Johnson";// 可以添加属性
    printl("修改后: " + JSON.stringify(car));
    printl("说明:可以修改对象的属性和添加新属性");
   
    // const car2 = {type:"Volvo"};// 错误!不能重新赋值整个对象
    printl("car={type:'Volvo'}; → 报错(不能重新赋值)");
   
    // 数组示例
    const cars = ["Saab", "Volvo", "BMW"];
    printl("const cars = " + JSON.stringify(cars));
    cars = "Toyota";   // 可以修改元素
    cars.push("Audi");      // 可以添加元素
    printl("修改后: " + JSON.stringify(cars));
    printl("说明:可以修改数组元素和添加新元素");
   
    // const cars2 = ["Toyota", "Volvo"];// 错误!不能重新赋值整个数组
    printl("cars=['Toyota','Volvo']; → 报错(不能重新赋值)");
   
    // 5. const 的重置规则(文档第189-214行)
    printl("【const 重置规则总结】");
    const r = 2;
    printl("const r=2; (合法)");
    // const r = 3;// 不合法
    // r = 3;      // 不合法
    // var r = 3;    // 不合法
    // let r = 3;    // 不合法
    printl("之后不能再声明或赋值 r (所有方式都不合法)");
   
    printl("Rhino引擎说明:");
    printl("在AIWROK的Rhino引擎中,const在函数作用域内不能重复声明");
    printl("即使在不同块中也会报错,这与标准ES6行为不同");
    printl("建议:在Rhino中避免在同一函数内多次使用同名const");
}

/**
* 变量提升示例(Hoisting)(文档第149-153行)
*/
function hoistingExample() {
    printl("========================================");
    printl("    变量提升示例 (Hoisting)");
    printl("========================================");
   
    // 1. var 变量提升(文档第150-151行)
    printl("【var 变量提升】");
    printl("在声明前使用 carName: " + carName);
    var carName;// 变量会被提升到作用域顶部
    carName = "Volvo";
    printl("声明并赋值后: " + carName);
    printl("说明:var 声明的变量会被提升,但赋值为 undefined");
   
    // 2. let 变量不提升(文档第152-153行)
    printl("【let 变量不提升】");
    // printl("在声明前使用 letCar: " + letCar);// 报错!
    let letCar = "BMW";
    printl("声明后使用 letCar: " + letCar);
    printl("说明:let 不会被提升,声明前使用会报错(暂时性死区)");
   
    // 3. 实际演示
    printl("【实际对比】");
   
    function testHoisting() {
      printl("var 测试:");
      printl("    声明前: x=" + x);// undefined
      var x = 5;
      printl("    声明后: x=" + x);// 5
      
      printl("let 测试:");
      // printl("    声明前: y=" + y);// 报错!
      let y = 10;
      printl("    声明后: y=" + y);// 10
    }
   
    testHoisting();
}

/**
* 实际应用示例 - 综合使用各种变量类型
*/
function practicalVariableUsage() {
    printl("========================================");
    printl("    实际应用 - 综合示例");
    printl("========================================");
   
    // 使用 const 定义配置常量
    const CONFIG = {
      appName: "AIWROK",
      version: "1.0.0",
      maxRetries: 3
    };
    printl("【应用配置】");
    printl("应用名: " + CONFIG.appName);
    printl("版本: " + CONFIG.version);
    printl("最大重试: " + CONFIG.maxRetries);
   
    // 使用 let 定义可变状态
    let retryCount = 0;
    let isConnected = false;
    printl("【运行时状态】");
    printl("重试次数: " + retryCount);
    printl("连接状态: " + isConnected);
   
    // 模拟状态变化
    isConnected = true;
    retryCount = 1;
    printl("状态更新后:");
    printl("重试次数: " + retryCount);
    printl("连接状态: " + isConnected);
   
    // 使用 var 定义临时变量
    var tempResult = 10 + 20;
    printl("【临时计算】");
    printl("10 + 20 = " + tempResult);
   
    // 实际应用场景:卡密管理系统中的变量使用
    printl("【卡密系统示例】");
    const CARD_RULES = {
      minLength: 5,
      mustStartWithLetter: true,
      validTypes: ["day", "month", "quarter", "halfYear", "year"]
    };
   
    var cardCode = "t2026040001";
    var cardType = "month";
    var devices = 2;
   
    printl("卡密: " + cardCode);
    printl("类型: " + cardType);
    printl("设备数: " + devices);
    printl("规则: 最小长度" + CARD_RULES.minLength + "位,必须字母开头");
}



/**
* 高级变量模式 - 闭包和数据封装
*/
function advancedVariablePatterns() {
    printl("========================================");
    printl("    高级变量模式 - 闭包");
    printl("========================================");
   
    // 使用闭包创建私有变量
    printl("【计数器模块 - 使用闭包】");
    var counter = (function() {
      var privateCount = 0;// 私有变量,外部无法直接访问
      
      return {
            increment: function() {
                privateCount++;
                return privateCount;
            },
            decrement: function() {
                privateCount--;
                return privateCount;
            },
            getCount: function() {
                return privateCount;
            }
      };
    })();
   
    printl("初始值: " + counter.getCount());
    printl("递增后: " + counter.increment());
    printl("再递增: " + counter.increment());
    printl("递减后: " + counter.decrement());
    printl("说明:privateCount 是私有变量,只能通过方法访问");
   
    // 工厂函数模式
    printl("【工厂函数 - 创建用户对象】");
    function createUser(name, age) {
      var privateAge = age;// 私有变量
      
      return {
            getName: function() {
                return name;
            },
            getAge: function() {
                return privateAge;
            },
            celebrateBirthday: function() {
                privateAge++;
                printl("    " + name + " 过生日了!现在 " + privateAge + " 岁");
            }
      };
    }
   
    var user1 = createUser("Alice", 25);
    var user2 = createUser("Bob", 30);
   
    printl("" + user1.getName() + " 的年龄: " + user1.getAge());
    printl("" + user2.getName() + " 的年龄: " + user2.getAge());
   
    user1.celebrateBirthday();
    printl("" + user1.getName() + " 的新年龄: " + user1.getAge());
    printl("说明:每个用户实例都有独立的私有变量");
   
    // 模块模式
    printl("【模块模式 - 组织代码】");
    var MathHelper = (function() {
      const PI = 3.141592653589793;// 常量
      
      return {
            add: function(a, b) {
                return a + b;
            },
            multiply: function(a, b) {
                return a * b;
            },
            circleArea: function(radius) {
                return PI * radius * radius;
            }
      };
    })();
   
    printl("加法: 5 + 3 = " + MathHelper.add(5, 3));
    printl("乘法: 4 × 6 = " + MathHelper.multiply(4, 6));
    printl("圆面积(r=5): " + MathHelper.circleArea(5).toFixed(2));
    printl("说明:PI 是模块内部的常量,外部无法修改");
}

/**
* 运行所有变量示例
*/
function runAllVariableExamples() {
    printl("########################################");
    printl("#   JavaScript 变量综合示例大全       #");
    printl("########################################");
   
    // 依次运行各个示例函数,每个示例之间间隔2秒
    variableBasicsExample();
    sleep.second(2);// 暂停2秒
   
    variableScopeExample();
    sleep.second(2);// 暂停2秒
   
    blockScopeExample();
    sleep.second(2);// 暂停2秒
   
    variableRedeclarationExample();
    sleep.second(2);// 暂停2秒
   
    constKeywordExample();
    sleep.second(2);// 暂停2秒
   
    hoistingExample();
    sleep.second(2);// 暂停2秒
   
    practicalVariableUsage();
    sleep.second(2);// 暂停2秒
   
    advancedVariablePatterns();
   
    printl("########################################");
    printl("#   所有变量示例运行完成            #");
    printl("########################################");
}

// =============================================================================
// 11. 主程序入口(包含变量示例)
// =============================================================================

// 运行完整工作流程演示
mainWorkflow();

// 运行 JavaScript 变量综合示例
runAllVariableExamples();

// 示例:批量创建卡密(取消注释以使用)
/*
var token = getToken();
if (token) {
    batchCreateCards(token, "t2026", 5, "day", 1);
}
*/

// 示例:单独调用某个功能
/*
// 获取当前设备 IMEI
var imei = device.getIMEI();
printl("当前设备 IMEI: " + imei);

// 换机激活
activateNewDevice("t2026040001", imei);
*/

printl("程序执行完毕!");













页: [1]
查看完整版本: 安卓脚本示例POST和GET变量方法的实际应用