JavaScript冷知识:shim 和 polyfill

es6-shim:适用于旧版JS引擎的ECMAScript 6兼容性垫片 ES6垫片 提供兼容性填充,以使旧式JavaScript引擎的行为与ECMAScript 6(Harmony)尽可能接近。 安装 如果要在浏览器中使用它: 只需在脚本之前包含es6-shim 。 包括尤其是在您的浏览器不支持ECMAScript 5的情况下-但每个JS引擎都需要es5-shim来纠正损坏的实现,因此强烈建议始终将其包含在内。 此外, es5-shim前应加载es6-shim 。 对于node.js , io.js或任何npm托管的工作流程(这是推荐的方法): npm install es6-shim 替代方法: 如果您正在使用 component install paulmillr/es6-shim。 如果您使用的是 bower install es6-shim 。 在浏览器和节点中,您可能还希望包含unorm ; 有关详细信息,请参见部分。 安全垫片 Map 立即下载

整自网上资料,知识点重要程度:低

在学习和使用 JavaScript 的时候,我们会经常碰到两个术语:shim 和 polyfill。它们有许多定义和解释,意思相近又有差异。

Shim

Shim 指的是在一个旧的环境中模拟出一个新 API ,而且仅靠旧环境中已有的手段实现,以便所有的浏览器具有相同的行为。主要特征:

  • 该 API 存在于现代浏览器中;
  • 浏览器有各自的 API 或 可通过别的 API 实现;
  • API 的所有方法都被重新实现;
  • 拦截 API 调用,并提供自己的实现;
  • 是一个优雅降级。

Polyfill

polyfill 是一段代码(或者插件),提供了那些开发者们希望浏览器原生提供支持的功能。程序库先检查浏览器是否支持某个API,如果不支持则加载对应的 polyfill。主要特征:

  • 是一个浏览器 API 的 Shim;
  • 与浏览器有关;
  • 没有提供新的API,只是在 API 中实现缺少的功能;
  • 以只需要引入 polyfill ,它会静静地工作;

shim 的概念要比 polyfill 更大一些,可以将 polyfill 理解为专门兼容浏览器 API 的 shim 。简单的说,如果浏览器X支持标准规定的功能,那么 polyfill 可以让浏览器 Y 的行为与浏览器 X 一样。

总结

shim和polyfill都是和浏览器向下兼容相关的名词,如果仍然无法区分2者就当做一种东西来理解吧。

从字面上来看,shim和polyfill都是为了“填充”,为了让浏览器这个虚拟机变得更通用,更统一,他们是web平台尚未一统天下之前的临时产物。

es5-shim.js es5-shim.js 有需要的赶紧下载吧.... 立即下载

相关推荐

【Unity】YooAsset与HybridCLR:高效资源管理与代码热更的黄金组合

本文深入探讨了Unity开发中YooAsset与HybridCLR的组合应用,为需要长期运营的项目提供了完整的资源与代码热更新解决方案。YooAsset作为高效的资源管理框架,简化了AssetBundle的打包、加载与热更流程;而HybridCLR则攻克了IL2CPP模式下C#代码无法热更的难题。两者结合,实现了从资源到逻辑的平滑在线更新,极大提升了开发迭代与线上维护的效率。

weixin_29006701的博客 281

2021-12-21 理解JS中的shim / polyfill / 垫片概念

通俗来讲,JS垫片就是,在低级环境中用高级语法时,在低级环境中手动实现的高级功能,模拟高级环境 打个比方, 你写的的JS代码是一张桌子,有4个语法腿。但4个腿都是用的es3,一样长,这时候桌子非常稳当。 但如果四个腿不一样长(一个腿是es5),桌子就有随时倒塌的可能,甚至不可用。这个时候你就需要垫片,把es3腿垫平,与es5一样高,你的桌面才能稳当的使用。 示例1 es5中的关于数组的forEach功能,在es3中不可用,你可以在es3中用Array.prototype.forEach=fn()来实现,此时

一只白猫罢了 1040

国产AI芯片实战:用寒武纪MLU370低成本部署DeepSeek-R1,实测推理效果与成本分析

本文详细介绍了寒武纪MLU370芯片在部署DeepSeek-R1大模型时的实战效果与成本优势。通过实测数据对比,MLU370在推理速度、能效比和本地化服务方面表现突出,尤其适合智能客服、内容生成等场景,可显著降低硬件投入和运维成本。

weixin_30613727的博客 457

JavaScript中的shim和polyfill是什么

在JS中引用插件的时候有两个词经常被提到,shim和polyfill.它们指的都是什么,又有什么区别?  shim是一个库,它将一个新的API引入到一个旧的环境中,而且仅靠旧环境中已有的手段实现;  polyfill就是一个用在浏览器API上的shim.我们通常的做法是先检查当前浏览器是否支持某个API,如果不支持的话就加载对应的polyfill.然后新旧浏览器就都可以使用这个API了

头名字W的博客 2805

InstallShield 打包 自定义安装依赖环境

用InstallShield2020打包.NetFramework4.5程序,程序需要集成Access数据库,必须安装AccessDatabaseEngine引擎,而InstallShield中自带的依赖项不包含该项,所以自定义集成了该依赖项。

zhaoziyu2020的博客 1128

从硬件到软件:深度解析D435i USB SCP overflow错误的根源与解决方案

本文深入解析Intel RealSense D435i相机在ROS环境下常见的'USB SCP overflow'错误,特别是与`control_transfer`相关的错误提示。从硬件配置到软件优化,详细介绍了如何通过调整USB接口、优化`rs_camera.launch`参数、更新固件驱动等方法解决数据传输溢出问题,提升设备稳定性和性能。

yy01234的博客 771

javascript中的shim和polyfill概念区别

关于在javascript中出现的两个术语 shim以及ployfill的解释, shim 首先关于shim的解释是这样的,在将一个新API调入到一个旧环境中,通过shim来在旧环境中模拟出一个新API,而且依靠旧环境已有的手段来实现,以便所有的浏览器具有相同的行为。 主要特征在于: 该 API 存在于现代浏览器中; 浏览器有各自的 API 或 可通过别的 API 实现; API 的所有方法都被...

vcbal的博客 306

Godot 城市模拟 – 005 OpenStreetMap 介绍:数据结构与详细示例

**摘要:OpenStreetMap(OSM)是一个开源协作奔驰地图的全球地图项目,采用社区编辑模式Tube数据自由共享。其核心数据结构包括节点(Node)、路径(Way)和关系-关系(Relation),通过标签(Tag)描述属性。节点代表坐标点,路径由节点序列组成线或面,关系则关联多个元素表达复杂地理实体。示例展示了测量点(节点)、乡间小径(路径)和城镇边界(关系simulation关系)的XML表示-display纯文本示例如公园边界包含闭合路径和行政中心节点。OSM的轻量级数据模型支持ising开放

mmx_2022的博客 1322

JavaScript中 polyfill 和 shim 的区别和联系

APIajax方法封装了XMLHttpRequest方法和IE用的ActiveXObject方式来创建xhr对象(通俗地讲,依靠浏览器原生支持的两个API,封装成问题:旧版本的 IE 不支持标准的 XMLHttpRequest,但支持自家的 ActiveXObject 方法解决办法1-shim(jQuery中,把XMLHttpRequest和ActiveXObject这两个新旧浏览器中的原生API,封装成 $.ajax 这个新的API。

m0_60707660的博客 924

在虚拟机中对阿克曼转向车进行导航及避障的仿真测试

一、    在我使用rosdep install teb_local_planner去安装teb_local_planner的时候,报错:Command ‘rosdep’ not found, but can be installed with:sudo apt install python3-rosdep2    我花大半个月好不容易建立起的一系列ROS环境,被python3-rosdep2这条万恶的语句连同ROS一起给我删了。。。悲伤来的那么猝不及防    随着ROS版本的迭代,相关资料很多都不再适用

慕羽★的博客 3810

为何wait和notify方法必须加锁?

为何wait和notify方法必须加锁? 是为了避免Lost Wake Up问题,即丢失唤醒问题。 所谓Lost Wake Up,指的是:线程A调用wait()方法进入阻塞状态,接下来没有其他线程去唤醒线程A,或者其他线程唤醒的时机不对(早于线程A的wait()),导致线程A永远阻塞下去。 下面以一个生产者和消费者的案例来说明上述问题。 假如我们有两个线程,一个消费者线程,一个生产者线程。生产者线程的任务可以简化成将count加一,而后唤醒消费者;消费者则是将count减一,而后在减到0的时候陷入睡眠,.

打酱油的葫芦娃 9156

JavaScript术语:shim 和 polyfill

原文出处:https://www.html.cn/archives/8339 在学习和使用 JavaScript 的时候,我们会经常碰到两个术语:shim 和 polyfill。它们有许多定义和解释,意思相近又有差异。 Shim Shim 指的是在一个旧的环境中模拟出一个新 API ,而且仅靠旧环境中已有的手段实现,以便所有的浏览器具有相同的行为。主要特征: 该 API 存在于现代浏览器中...

mystonelxj的博客 8384

【STM32 Blue Pill编程】-STM32CubeIDE开发环境搭建与点亮LED

本文为使用 STM32Cube IDE 的 STM32 Blue Pill 入门教程。 在本文中,我们将介绍如何控制 STM32 Blue Pill 的 GPIO 引脚。以及开发环境搭建。 本系列文章将重点介绍采用 ARM Cortex-M 的 BluepellSTM32F103C8 微控制器以及如何使用 STM32CubeIDE 对其进行编程。 STM32CubeIDE是STM32官网提供的IDE

视觉与物联智能 1072

shim和polyfill的区别,重点是Polyfill的作用和使用。

在JavaScript的世界里,有两个词经常被提到,shim和polyfill.它们指的都是什么,又有什么区别? 一个shim是一个库,它将一个新的API引入到一个旧的环境中,而且仅靠旧环境中已有的手段实现 一个polyfill就是一个用在浏览器API上的shim.我们通常的做法是先检查当前浏览器是否支持某个API,如果不支持的话就加载对应的polyfill.然后新旧浏览器就都可以使用这个API了...

无情洛----洛辰的博客 1226

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

深度学习工具包 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'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('DeepLearnToolbox'));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('state',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'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',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 = 'sigm';%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, 'Too big error');```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('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';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)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';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, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% 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'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 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, 'Too big error');```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('state',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, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',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, 'Too big error');%% ex3 neural net with dropoutrand('state',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, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % 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, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % 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, 'Too big error');%% 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('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % 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, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

shim和polyfill傻傻分不清

shim和polyfill傻傻分不清先说说shim再谈谈ployfill 关于JavaScript兼容性的问题,当前主要有两种解决方案,本人目前才大四,经常在优快云和掘金上看文章的时候看到这两个词,映像上是解决JS兼容性的,但是好像大概也许有一些差别,今天特地翻阅了下网上的文章,谢谢自己的理解和心得。 先说说shim shim是一个库,他将在不同浏览器上兼容性不同的api封装成一种,这么说可能有...

qq_33586179的博客 625

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

shim和polyfill的区别,重点是Polyfill的作用和使用

在JavaScript的世界里,有两个词经常被提到,shim和polyfill.它们指的都是什么,又有什么区别? 一个shim是一个库,它将一个新的API引入到一个旧的环境中,而且仅靠旧环境中已有的手段实现 一个polyfill就是一个用在浏览器API上的shim.我们通常的做法是先检查当前浏览器是否支持某个API,如果不支持的话就加载对应的polyfill.然后新旧浏览器就都可以使用这个API了...

Lerch_Wang的博客 508

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

前端老铁别懵圈:shim 和 polyfill 到底有啥不一样?(附避坑指南)

shim = 接口翻译,不造功能,只转发。polyfill = 功能克隆,缺啥造啥,自带器官。“shim 是口红,polyfill 是整容。口红卸了还能看,整容失败……那就只能回炉重造了。下次再有同事把俩词混着叫,你就把这篇文章甩他脸上,让他好好背三遍,背不会?webpack alias 配一夜,包教包会,保熟。欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。DTcode7的博客首页。

一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身"农奴"把歌唱,一边打入敌人内部一边持续提升自己,为我们广大开发同胞谋福祉,坚决抵制睿智产品折磨我们码农兄弟! 881

Shim 和 Polyfill 的区别

在JavaScript的世界里,有两个词经常被提到,Shim 和 Polyfill。它们指的都是什么,又有什么区别? 一个 Shim 是一个库,它将一个新的API引入到一个旧的环境中,而且仅靠旧环境中已有的手段实现。 一个 Polyfill 就是一个用在浏览器 API 上的 Shim。我们通常的做法是先检查当前浏览器是否支持某个 API,如果不支持的话就加载对应的 Polyfill。然后...

听胡说 261

shim和polyfill之间的区别是什么

在 javascript 的世界里,我们经常会遇到shim和polyfill两个术语,那么它们之间到底有什么区别呢? Shim Shim 通常是一个代码库,它给旧环境(并不一定特指浏览器环境)带来的往往是全新的 api,而且这些 api 只能在这个环境当中运行。 Polyfill 在 2010年10月,Remy Sharp在他的博客中对 polyfill 做了如下定义: Polyfill 就是一系...

Jserm的博客 619

shim和polyfill有什么区别

在JavaScript的世界里,有两个词经常被提到,shim和polyfill.它们指的都是什么,又有什么区别? 一个shim是一个库,它将一个新的API引入到一个旧的环境中,而且仅靠旧环境中已有的手段实现 一个polyfill就是一个用在浏览器API上的shim.我们通常的做法是先检查当前浏览器是否支持某个API, 如果不支持的话就加载对应的polyfill.然后新旧浏览器就都可以...

anke5248的博客 220

polyfill、shim原理及如何实现的?

目的:polyfill和shim都是为了解决兼容性问题,但侧重点不同。polyfill更侧重于为旧浏览器添加新特性支持,而shim则更侧重于在新环境中提供对旧代码的兼容支持。实现方式:polyfill通常通过提供新的实现来模拟原生功能,而shim则更多地依赖于对现有代码或接口的拦截和修改。使用场景:在选择使用polyfill还是shim时,需要根据具体的项目需求和环境差异来决定。如果目标环境缺少某些关键特性,且这些特性无法通过简单的代码修改来替代,那么使用polyfill可能更为合适。

王铁柱666的博客 603

深入理解es6-shim:从源码角度看ES6 API的polyfill技巧

es6-shim是一个为旧版JavaScript引擎提供ECMAScript 6兼容性的shim库,通过polyfill技术让开发者在不支持ES6的环境中也能使用新的API。本文将从源码角度解析其核心实现技巧,帮助开发者掌握polyfill开发的精髓。 ## 什么是polyfill?为什么需要它? 🤔 polyfill是一段代码(通常是JavaScript),用于为旧浏览器提供其不支持的原生

gitblog_00044的博客 480

url-shim:浏览器兼容的Node.js URL和URLSearchParams类polyfill

url-shim:浏览器兼容的Node.js URL和URLSearchParams类polyfill 在现代网络开发中,确保跨平台和跨浏览器的兼容性是至关重要的。今天,我们为您介绍一个优秀的开源项目——url-shim,它能够帮助开发者解决在浏览器和Node.js环境之间URL处理的一致性问题。 项目介绍 url-shim 是一个仅为1.53kB的浏览器polyfill,用于模拟Node.js中...

gitblog_00736的博客 1045
上一篇: 信息论入门:信息守恒定律与纠错码
下一篇: HTTPS的重大漏洞:豆腐(TOFU)
xosg
xosg 领域专家: 网络协议与安全技术领域 领域专家: 网络协议与安全技术领域
博客等级 码龄9年 1986粉丝 864原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xosg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值