 | |  |  | 安卓脚本示例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[i]));
- }
-
- 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[0] = "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("程序执行完毕!");
复制代码
| |  | |  |
|