函数式编程(3)

 一. 闭包:理解(1):就是一个函数,捕获作用域内的外部绑定(例如:不是自己的参数)。这些绑定是为之后使用(即使在该作用域已结束)而定义的。(不用var的变量是全局变量)

              理解(2):闭包就是能够读取其他函数内部变量的函数(定义在一个函数内部的函数)。

  (1)变量的作用域有两种:全局变量和局部变量;

由于在函数内部可以读取外面的全局变量,而外部的全局变量,不能读取内部的局部变量,所以就需要方法来实现。

例如:

function f1(){
   var n=999;
    return function f2(){
      return n;
    }
  }
  var result=f1();
// 999
由于要在外面得到发f1()里面的变量n,能从内部实现闭包进行得到。所以f2()就是上面说的闭包。 

  (2)闭包的用途:1、可以读取函数内的变量。2、就是让这些变量始终保存在内存中。

例如:

function f1(){
    var n=999;
    nAdd=function(){n+=1}
    return function f2(){
      console.log(n);
    }
  }
  var result=f1();
  result(); // 999
  nAdd();
  result(); //1000
通过这个可以看出f1()中的变量n,一直保存在内存中。不会被垃圾回收机制回收 

  (3)闭包的缺点:通过闭包使用的函数变量会一直保存在内存中,这样就会造成内存消耗很大,从而影响远行速率。所以要适当的使用闭包。

面试复习题--RN面试 考察点:热更新方案的深度理解,选型能力,实战落地经验。答题思路主流热更新方案对比。 阅读详情

相关推荐

SAP面试全过程(已拿offer)

周五打电话给我说过了SAP第一轮面试,第二轮要在下周四北京,这几天终于体会到了什么叫做重压下的感觉,越复习越虚,看别人的面经都感觉卧槽这问题也巨难了吧...连去北京可以见妹子这种事情都感觉一点心情都没有。面前准备固然是要有的,但关键是平时就要有料,多想想自己做的项目。当作一个给自己的提醒吧!

cloudray8580的专栏 4万+

Vue3函数式编程

本文主要记录vue3中的函数式编程以及其他编程风格的简介。

smz的博客 1190

一文看懂—Agent多智能体协作

多智能体协作已成为AI应对复杂任务的关键范式,通过模拟人类团队分工,实现专业化、高效化和纠错能力。本文系统阐述了多智能体协作的核心概念(智能体分工、工作流编排、工具使用)、与产品规划的关联(任务拆解、错误处理、组织架构设计),以及典型应用场景(报告生成、客服工单、学习规划)。同时剖析了常见陷阱(循环卡死、信息失真、成本失控)及解决方案,并提供了实用工具模板(角色定义卡、工作流画布、成本仪表盘)。最后通过市场竞品分析和旅行规划两个实战案例,展示了多智能体协作的实际价值。该技术正推动AI从单点智能迈向系统智能,

lee006006的博客 1036

Vue3 的函数式编程

Vue3.0 正式版已经于9月底发布,其中,Vue3 新增的composition-api 是我们讨论的大热门,甚至不少 react 开发者都对其赞不绝口。那么,究竟什么是 函数式编程 ?composition-api 又厉害在哪里捏? 注:看本文章之前,你需要了解一下 Vue3 的 composition-api 动机 逻辑的组合与复用。 组件 API 设计所面对的核心问题之一就是如何组织逻辑,以及如何在多个组件之间抽取和复用逻辑。 在此之前,Vue2.x 的 Mixins 以及 react 的高阶组件等

qq_42941302的博客 7497

Renesas:定时器输入捕获

一、PWM输入捕获 1、Smart Configurator配置 注意:在使用前,需要使能对应的定时器!否侧无法正常进行输入捕获! 2、脉冲宽度的获取 如何区分高低电平的脉冲宽度:最常用的方法就是在触发中断后,判断IO口的高低电平,来确认是上升沿触发的中断还是下降沿触发的中断。 若无法进入中断,可查看:Renesas:配置中断的常规流程 (1)中断方式(Smart Configurator生成的代码) #pragma interrupt r_Config_TAUB0_0_i...

不吃鱼的猫的博客 2485

从病毒分析到安全研究:手把手教你用OD破解加壳程序的反调试机制

本文深入探讨了如何识别并绕过加壳程序的反调试机制,特别是针对使用IsDebuggerPresent等API检测的防护手段。通过实战案例和工具链配置,详细介绍了逆向工程中的关键技巧,包括内存补丁、硬件断点定位OEP等,帮助安全研究人员有效突破软件保护技术。

tgb345678的博客 825

从函数式编程和面向对象的思考到Vue3的函数式编程

概要:函数式编程和面向对象是日常编程中非常常见的。在前端项目的开发中,经常是面向对象与函数式编程混合使用,本文进行案例函数式与面向对象的一些对比。然后从hook的角度引入函数式组件再到vue3的函数式编程。也有部分java的lambda与stream流的函数式编程。 一 、数据的处理方式 1.1数据存放方式决定了访问的方式。 1、对于OO来说,访问数据(全局变量除外)需要先获取对象的引用,然后再进行操作(直接访问——公共属性,或者调用成员函数/方法访问——私有属性) 2、对于函数式,访问数据是直接访问(通过

qq_21561833的博客 2060

R | 提取文件夹内栅格数据的最小值、最大值、标准差和平均值

各位同学好,我们长需要用长时间序列栅格数据的平均值做变量的时间变化分析,用代码能够帮助我们省下很多时间。

qq_48539301的博客 450

Python3的函数式编程

参考:https://coolshell.cn/articles/10822.html https://www.imooc.com/learn/317 用过python的闭包,装饰器,map,reduce,filter等函数,也知道可以把一个函数作为一个变量进行赋值,传递;但是还不知道这些都属于函数式编程的范畴,也一直以为这些都是理所当然的,当然,去区分我们写的程序是函数...

lincoco49的博客 670

ACS运动控制器编程语言

ACS运动控制器采用SPiiPlusLanguage(SPL)作为核心编程语言,该语言基于C语法设计,内置丰富的运动控制指令,支持点位运动、插补等复杂控制。控制器提供专用开发工具SPiiPlusManager和ACSStudio,支持图形化编程与调试。同时兼容TCP/IP、EtherCAT等多种扩展接口,便于与上位机或PLC集成。使用时需注意实时性优先级、轴参数匹配等关键事项。官方文档和示例程序为开发者提供了完善的学习资源。

StevenChen的博客 627

数据分片的三种方式:哈希、一致性哈希、按照数据范围分片

数据分片就是按照一定的规则,将数据集划分成相互独立、正交的数据子集,然后将数据子集分布到不同的节点上。通过设计合理的数据分片规则,可将系统中的数据分布在不同的物理数据库中,达到提升应用系统数据处理速度的目的。三种常用的数据分片方式:1. 哈希分片2. 一致性哈希分片(Consistent Hash)3. 按照数据范围分片(Range Based)数据分片的应用场景:1. 数据库扩展2. 分布式缓存对集群部署多个缓存节点,提高缓存的处理能力。

wjianwei666的专栏 1135

Python3: 函数式编程特性

函数式编程就像是用乐高积木搭建程序:每个函数都是一个小积木,我们通过组合这些积木来构建复杂的结构,而不是改变它们的形状。函数式编程是一种编程范式,它将计算视为数学函数的求值,并避免改变状态和可变数据。函数是"一等公民"(可以像普通变量一样被传递和使用)强调"不可变性"(避免修改已有数据)追求"纯函数"(相同输入总是产生相同输出,没有副作用)喜欢"声明式"而非"命令式"(描述"做什么"而非"怎么做")

weixin_45705239的博客 748

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

1-3、什么是函数式编程

“函数式编程”首先要说一点,它是一种很古老的概念,它的历史可以追溯到第一台计算机的诞生。 这么老,为什么还要学? 因为它随着React的流行受到了越来越多的关注,React的生态组件里运用了大量的高阶函数,高阶函数就是函数式编程的一个特性。包括Vue3也开始运用函数式编程。所以你学不学? 网上有太多的帖子来解释这个概念,但大多数帖子的解释都不太好理解。尤其像我这种上岁数的人,完全理解不了。 现在我用最直白的大白话来解释一下它的概念,这要是再看不懂的话。我只能说:永别!!!!! 函数式编程(Funct

qq_41543217的博客 249

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Python3 函数式编程

• 函数式编程是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此任意一个函数,只要输入是确定的,输出就是确定的。

专注计算机视觉算法训练,算法优化部署以及SDK开发的知识分享。 668

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain&#39;s apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath(&#39;DeepLearnToolbox&#39;));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand(&#39;state&#39;,0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = &#39;sigm&#39;;%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, &#39;Too big error&#39;);```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, &#39;Too big error&#39;);```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

vue3 为什么要使用composition函数式编程

vue3除去一堆零敲碎打的优化更新之后最让我觉得眼前一亮的就是composition组合式组件以及其对应的函数式写法了。 首先,我们先看下composition组件的用法。其实如果从光从写法上来看和option配置型写法区别不大只不过是换成了函数式,切需要在新的hook setup() 中注册返回一下 具体写法 export default { setup() { // 相当于data,需要用ref生成reactive对象,对其value值赋值触发依赖收集访问 const count

weixin_39168678的博客 1204

Vue3组合式API与函数式编程对比

组合式 API 是 Vue 特有的逻辑组织方式,虽然使用函数形式,但核心仍是响应式编程范式。函数式编程则是一种更严格的编程范式,二者解决的问题域不同,可以结合使用但不应等同视之。

BillKu的博客 772

Vue 3 函数式编程与Composition API

函数式编程强调纯函数、不可变性和高阶函数等特性。Vue3的Composition API与该范式高度契合:计算属性体现纯函数思想,响应式状态可模拟不可变性,自定义Hook实现了高阶函数和逻辑复用。文章重点展示了函数式编程中的compose函数实现,并演示了如何在Vue3中应用函数式思想,通过组合小函数构建复杂逻辑,如useCounter和useDoubleCounter等自定义Hook。这种编程方式提升了代码的可维护性和复用性,是Vue3的重要创新。

分享前端工程化、AI 应用、Agent 开发与大模型实践! 564

Python3快速入门—9.函数式编程

9.函数式编程 9.1闭包 9.1.1函数也是对象 在Python3中,没有函数重载。即当函数名相同,参数列表不同时,后面定义的函数会覆盖前面定义的函数。 #程序9-1 def add(x,y):     return x+y   def add(x,y,z):     return x+y+z   print(add(1,2)) print(add(1,2,3)) 运行...

Bing_bing_bing_的博客 719

Python3中lambda表达式与函数式编程讲解

今天小编就为大家分享一篇关于Python3中lambda表达式与函数式编程讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧 简单来说,编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。其一般有如下几种使用方式: 1、lambda的一般形式是关键字lambda后面跟一个或多个参数,紧跟一...

python函数学习教程 2166

《Java函数式编程实战》学习总结 第3章 流

摘要 本章介绍了Java中的Stream流操作,重点讲解了惰性求值机制和常用流操作方法。惰性求值通过返回Stream实现延迟计算,而及早求值则立即产生结果。常用的流操作包括collect、map、filter、flatMap等数据转换方法,以及min、max、reduce等聚合操作。通过示例展示了如何用流式操作重构传统迭代代码,使其更简洁高效。此外还探讨了高阶函数和纯函数的概念,指出判断高阶函数的方法是检查其参数或返回值是否包含函数接口。最后通过练习题巩固了流操作的使用技巧。

七月的夏天博客 793

Vue 3 组合式 API 详解:告别 Mixins,拥抱函数式编程

Vue 3组合式API带来了革命性改变,通过Composable函数解决了Vue 2中Mixins的命名冲突和逻辑碎片化问题。其核心改进包括:1)采用函数式编程思想封装逻辑,提高代码复用性;2)基于Proxy重构响应式系统,支持动态属性监听并提升性能;3)原生TypeScript支持。相比Vue 2的选项式API,组合式API让代码组织更清晰,维护性更强,是Vue生态的重要升级。

weixin_45274678的博客 840

Python3函数式编程

python3函数式编程

time block 599

Python3 学习笔记19_函数式编程_20180308

#!/usr/bin/env python3 # -*- coding: utf-8 -*- # 学习网站:www.liaoxuefeng.com #**************************************************** # Python3 函数式编程 * #***************************...

BugLiu 266

Python3 函数式编程(高阶函数)

这一次主要是学习了一下Python3函数式编程思想,介绍了3个代表性高阶函数:map(), reduce(), filter()。像 sorted() 其实也是高阶函数,可以接受函数作为参数。这篇学习笔记中编写了大量高阶函数,同时介绍了Python中的闭包,装饰器。这些思想和方法很美妙,我受益匪浅。当然这些都需要进一步运用和学习。 运行环境:Python3.6 + Jupyter noteboo...

weixin_30256505的博客 151

《Scala 3》--函数式编程

函数式编程: 函数式编程的特点 函数式编程核心价值在于多核编程。 1) 参数私有 val,没有线程安全问题,这样就为分布式高并发提供了支持 2) 把函数做为参数 3) 把函数的返回值作为参数 定义:在js中方法和函数比较模糊。scala中的函数和方法不同,函数在scala中是一等公民。 格...

yk_3215123的博客 344
上一篇: 函数式编程(2)
下一篇: 面向对象编程
黄祚敏
博客等级 码龄10年 22粉丝 89原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值