记录错误日志
window.onerror = function(message, url, lineNumber,columnNo,error) {
var data = {
"message":message,
"url":url,
"error":error.stack
};
$.ajax({
url:"/error/capture",
type:"post",
data:data,
success:function(){
}
});
return true;
};
javascript随机数生成算法
function rnd( seed ){
seed = ( seed * 9301 + 49297 ) % 233280; //为何使用这三个数?
return seed / ( 233280.0 );
};
function rand(number){
today = new Date();
seed = today.getTime();
return Math.ceil( rnd( seed ) * number );
};
myNum=(rand(5));
var rand = (function(){
var seed = (new Date()).getTime()
function r(){
seed = (seed*9301+49297)%233280
return seed/(233280.0)
}
return function(number){
return Math.ceil(r()*number)
}
})()
rand = (function(){
var today = new Date();
var seed = today.getTime();
function rnd(){
seed = ( seed * 9301 + 49297 ) % 233280;
return seed / ( 233280.0 );
};
return function rand(number){
// return Math.ceil(rnd(seed) * number);
return Math.ceil(rnd() * number);
};
})();
myNum = (rand(5));
JavaScript 中,如何求出两个数组的交集和差集
_.intersection([1, 2, 3], [101, 2, 1, 10], [2, 1]);
=> [1, 2]
_.difference([1, 2, 3, 4, 5], [5, 2, 10]);
=> [1, 3, 4]
let a = new Set([1, 2, 3]);
let b = new Set([3, 5, 2]);
// 并集
let unionSet = new Set([...a, ...b]);
//[1,2,3,5]
// 交集
let intersectionSet = new Set([...a].filter(x => b.has(x)));
// [2,3]
// ab差集
let differenceABSet = new Set([...a].filter(x => !b.has(x)));
// [1]
再把Set转换为数组即可.
let arr = Array.from(set);
// 或 let arr = [...set];
相同的
a.filter(function(v){ return b.indexOf(v) > -1 })
不同的
a.filter(function(v){ return !(b.indexOf(v) > -1) }).concat(b.filter(function(v){ return !(a.indexOf(v) > -1)}))
获取某个DOM元素绑定的事件
getEventListeners($("selector")) 方法以数组对象的格式返回某个元素绑定的所有事件
getEventListeners($("#firstName")).click[0].listener 会返回ID为 firstName 元素绑定的click事件
inspect($("selector")) 会检查所有匹配选择器的DOM元素,并返回所有选择器选择的DOM对象。例如inspect($("#firstName")) 选择所有ID是 firstName 的元素,inspect($("a")[3]) 检查并返回页面上第四个 p元素。
$0, $1, $2等等会返回你最近检查过的几个元素,例如 $0 会返回你最后检查的元素,$1 则返回倒数第二个
img onerror事件触发
$("img").each(function() {
if (!this.complete || typeof this.naturalWidth == "undefined" || this.naturalWidth == 0) {
this.src = "default.png";
}
});
禁止浏览器记住密码
在input[type=’password’]的前面加上一个隐藏的密码框即可,且要求是:不能添加id和name属性
var $body = $("body");
document.title = ‘title’
// hack在微信等webview中无法修改document.title的情况
var $iframe = $("").on("load", function() {
setTimeout(function() {
$iframe.off("load").remove()
}, 0)
}).appendTo($body)
图片的预加载
function imgLoad(src){
var img = new Image();
if(img.complete){ //从缓存里面取
callback();
}else{
img.onload = function(){ //实际加载完成
callback();
}
}
img.src = src;
}
实现类似于add(1)(2)(3)调用
function add(x){
var sum = x;
var tmp = function(y){
sum = sum + y;
return tmp;
}
tmp.toString = function(){
return sum;
}
return tmp
}
用代码来画个国旗
js获取URL中的参数
function getQueryString(url, name) {
var reg = new RegExp("(^|&|?)" + name + "=([^&]*)(&|$)", "i");
var r = url.substr(1).match(reg);
if (r != null) return unescape(r[2]); return null;
}
视频video标签在移动端的播放总结
function video_loading( $video ){
$(".video_loading").show();
var timer = setInterval(function(){
var currentTime = $video[0].currentTime; // 检测当前的播放时间
if( currentTime>0 ){
$(".video_loading").hide();
clearInterval( timer );
}
}, 100)
}
/**
视频的播放时间改变时进行的操作
videoid video标签的id
cur 当前播放时间,可以传入ended参数
func 回调函数
*/
videoUpdate : function(videoid, cur, func){
var myVideo = document.getElementById(videoid);
if( myVideo ){
if( typeof cur =="number" ){
myVideo.addEventListener("timeupdate", function(){
if( this.currentTime>=cur ){
func();
myVideo.removeEventListener("timeupdate", function(){
}, false);
}
}, false);
}else{
myVideo.addEventListener(cur, function(){
func();
}, false);
}
}
}
// 第一屏的视频进行到4秒时,显示透明图层以提供用户操作
tool.videoUpdate( "video1", 4, function(){
$(".s1 .overlay").show();
});
// 第一屏的视频结束时,显示向下滑动提示按钮
tool.videoUpdate( "video1", "ended", function(){
$(".s1 .tip").show();
});
为博客的文章添加二维码
$(".bcontent").append("");
$(".bcontent").on("click", ".qrcode a", function(){
var $tsp = $(this).next();
if( $tsp.find("canvas").length ){
if( $tsp.css("display")=="block" ){
$tsp.hide();
}else{
$tsp.show();
}
}else{
if( self.showing ){
return;
}
self.showing = true;
$tsp.show().html( "正在生成中..." );
$.ajax({
url : "jquery.qrcode.min.js",
dataType : "script",
type : "get"
}).done(function(){
self.showing = false;
$tsp.html("");
$tsp.qrcode({
render : "canvas",
width : 176,
height: 176,
text : window.location.href
});
})
}
})
使用DOM中的a标签解析url
// 创建一个额外的a标签
function parseURL(url) {
var a = document.createElement("a");
a.href = url;
return {
source: url,
protocol: a.protocol.replace(":",""),
host: a.hostname,
port: a.port,
query: a.search,
params: (function(){
var ret = {},
seg = a.search.replace(/^?/,"").split("&"),
len = seg.length, i = 0, s;
for (;i
javascript如何添加前置0
function addPreZero(num){
return ("000000000"+num).slice(-10);
}
html5实现图片预览和查看原图
var upimg = document.querySelector("#upimg");
upimg.addEventListener("change", function(e){
var files = this.files;
if(files.length){
// 对文件进行处理,下面会讲解checkFile()会做什么
checkFile(this.files);
}
});
// 图片处理
function checkFile(files){
var file = files[0];
var reader = new FileReader();
// show表示,用来展示图片预览的
if(!/image/w+/.test(file.type)){
show.innerHTML = "请确保文件为图像类型";
return false;
}
// onload是异步操作
reader.onload = function(e){
show.innerHTML = "";
}
}
判断 x 是否是整数
function isInteger(x) {
return parseInt(x, 10) === x;
}
function add(x, y) {
return x.toPrecision() + y.toPrecision()
}
console.log(add(0.1,0.2));
function add(num1, num2){
let r1, r2, m;
r1 = (""+num1).split(".")[1].length;
r2 = (""+num2).split(".")[1].length;
m = Math.pow(10,Math.max(r1,r2));
return (num1 * m + num2 * m) / m;
}
console.log(add(0.1,0.2)); //0.3
console.log(add(0.15,0.2256)); //0.3756
PhantomJS抓取网页并将它渲染成图片
var page = require("webpage").create();
page.settings.userAgent = "WebKit/534.46 Mobile/9A405 Safari/7534.48.3";
page.settings.viewportSize = { width: 400, height: 600 };
page.open("http://m.bbc.co.uk/news/business", function (status) {
if (status !== "success") {
console.log("Unable to load BBC!");
phantom.exit();
} else {
window.setTimeout(function () {
page.clipRect = { left: 0, top: 0, width: 400, height: 600 };
page.render("bbc-page1.png");
page.clipRect = { left: 0, top: 600, width: 400, height: 600 };
page.render("bbc-page2.png");
phantom.exit();
}, 2000);
}
});
复制与粘贴
Email me at matt@example.co.uk
var copyEmailBtn = document.querySelector(".js-emailcopybtn");
copyEmailBtn.addEventListener("click", function(event) {
// Select the email link anchor text
var emailLink = document.querySelector(".js-emaillink");
var range = document.createRange();
range.selectNode(emailLink);
window.getSelection().addRange(range);
try {
// Now that we"ve selected the anchor text, execute the copy command
var successful = document.execCommand("copy");
var msg = successful ? "successful" : "unsuccessful";
console.log("Copy email command was " + msg);
} catch(err) {
console.log("Oops, unable to copy");
}
// Remove the selections - NOTE: Should use
// removeRange(range) when it is supported
window.getSelection().removeAllRanges();
});
倒计时的JS
var time_distance;
var totleTime;
var stop;
function countdownTime(disTime){
time_distance =disTime;
totleTime=time_distance;
showTime();
}
function showTime(){
time_distance=totleTime;
var day=0,
hour=0,
minute=0,
second=0;//时间默认值
if(time_distance > 0){
day = Math.floor(time_distance / (60 * 60 * 24*1000));
hour = Math.floor(time_distance / (60 * 60*1000)) - (day * 24);
minute = Math.floor(time_distance / (60*1000)) - (day * 24 * 60) - (hour * 60);
second = Math.floor(time_distance/1000) - (day * 24 * 60 * 60) - (hour * 60 * 60) - (minute * 60);
}
if (hour <= 9) hour = "0" + hour;
if (minute <= 9) minute = "0" + minute;
if (second <= 9) second = "0" + second;
// 显示时间
$("#time_d").text(day+"天");
$("#time_h").text(hour+"时");
$("#time_m").text(minute+"分");
$("#time_s").text(second+"秒");
stop=setTimeout("showTime()",1000);
totleTime=totleTime-1000;
if(totleTime<1000){
$("#time_d").text("活动");
$("#time_h").text("已经");
$("#time_m").text("结束");
$("#time_s").text("。");
clearTimeout(stop);
}
}
一个数每隔一秒执行加1并打印出来
var count = (function() {
var timer;
var i = 0;
function change(tar) {
i++;
console.log(i);
if (i === tar) {
clearTimeout(timer);
return false;
}
timer = setTimeout(function() {
change(tar)
}, 1000)
}
return change;
})()
count(50)
onerror log
"use strict";
function errorHandler( message, source, lineno, colno, error){
var errorDiv = document.getElementById("error");
errorDiv.classList.remove("hide");
console.log("Error happened, message:", message);
console.log("On source file: ", source);
console.log("On line - col: ", lineno, "-", colno);
console.log("Error:", error);
try {
var ua = navigator.userAgent;
console.log("UA: ", ua);
} catch (e) {
console.log("Unable to get UA");
}
}
window.onerror = errorHandler;
javascript copy
"use strict";
function addCopyEventListener(url){
var divs = document.querySelectorAll("div.copyAsText");
for (var index in divs) {
if(!divs.hasOwnProperty(index)) {
continue;
}
var div = divs[index];
var input = div.querySelector("input");
var btn = div.querySelector("label");
if (url !== "") {
var template = input.getAttribute("data-template");
input.value = template.replace("${url}", url);
}
void function(btn, input){
btn.addEventListener("click", function(){
if (btn.disabled) {
return;
}
var res = false;
try {
input.disabled = false;
var section = window.getSelection();
section.removeAllRanges();
input.focus();
input.setSelectionRange(0, input.value.length);
res = document.execCommand("copy");
input.disabled = true
} catch(e) {
res = false;
}
if (res) {
var origin = btn.textContent;
btn.textContent = "Copied!";
btn.disabled = true;
setTimeout(function(){
btn.textContent = origin;
btn.disabled = false;
}, 2000);
} else {
window.prompt("Copy to clipboard: Ctrl+C, Enter", input.value);
}
});
}(btn, input);
}
}
addCopyEventListener("");
//https://github.com/imsobear/blog/issues/31
//只需要对相应的元素绑定 mouseenter 的事件,然后响应 selectText() 这个方法就 ok
function selectText (element) {
var text = element,
range,
selection;
if (body.createTextRange) {
// IE
range = body.createTextRange();
range.moveToElementText(text);
range.select();
} else if (window.getSelection) {
// Others
selection = window.getSelection();
range = doc.createRange();
range.selectNodeContents(text);
selection.removeAllRanges();
selection.addRange(range);
} else {
return false;
}
}
把节点列表(NodeList)转换为数组
var elements = document.querySelectorAll("p"); // NodeList
var arrayElements = [].slice.call(elements); // 现在 NodeList 是一个数组
var arrayElements = Array.from(elements); // 这是另一种转换 NodeList 到 Array 的方法
var array1 = [1,2,3];
var array2 = [4,5,6];
console.log(array1.push.apply(array1, array2)); // [1,2,3,4,5,6];
JavaScript实现字符串长度截取
function cutstr(str, len) {
var temp;
var icount = 0;
var patrn = /[^x00-xff]/;
var strre = "";
for (var i = 0; i < str.length; i++) {
if (icount < len - 1) {
temp = str.substr(i, 1);
if (patrn.exec(temp) == null) {
icount = icount + 1
} else {
icount = icount + 2
}
strre += temp
} else {
break
}
}
return strre + "..."
}
function $(id) {
return !id ? null : document.getElementById(id);
}
// 用法:如果地址是 test.htm?t1=1&t2=2&t3=3, 那么能取得:GET["t1"], GET["t2"], GET["t3"]
function get_get(){
querystr = window.location.href.split("?")
if(querystr[1]){
GETs = querystr[1].split("&")
GET =new Array()
for(i=0;i 100) ? "block": "none"
}
};
backTop("goTop");
mockjs让前端开发独立于后端
rand num
function GetRandomNum(Min,Max)
{
var Range = Max - Min;
var Rand = Math.random();
return(Min + Math.round(Rand * Range));
}
var num = GetRandomNum(10,100);
创建XMLHttpRequest对象
function createXHR(){
if(typeof XMLHttpRequest != "undefined"){
return new XMLHttpRequest();
}else if(typeof ActiveXObject != "undefined"){
if(typeof arguments.callee.activeXString != "string"){
var versions = ["MSXML2.XMLHttp.6.0","MSXML2.XMLHttp. 3.0","MSXML2.XMLHttp"],i,len;
for(i = 0,len=versions.length;i=200 && xhr.status<300) || xhr.status== 304){
alert(xhr.responseText);
}else{
alert("Request was unsuccessful: " + xhr.status);
}
}
}
多行文本溢出显示省略号
var module = document.getElementById("clamp-this-module");
$clamp(module, {clamp: 3});
微信页面监听摇一摇事件,并伴有音效
鼠标向下滚动的时候header会消失
//设置下css,加个绿色的背景,明显
$(".sf-header").css({
background : "#CFC",
width: "100%"
});
//
$(document).scroll( function(){
var me = arguments.callee; //匿名函数可以 通过 arguments.callee 调用自己
me.doc = me.doc || $(document); //缓存 $(document);
me.head = me.head || $(".sf-header");
me.lastTop = me.lastTop || me.doc.scrollTop();
if( me.doc.scrollTop() < 20 || me.doc.scrollTop() > me.lastTop ){
//向下 或再 页面顶部,放在 头部
me.head.css({ position : "relative" });
}else if( me.doc.scrollTop() < me.lastTop ){
//向上,悬浮
me.head.css({ position : "fixed" });
}
me.lastTop = me.doc.scrollTop();
});
v2ex 的下一主题
window.location.href = "https://www.v2ex.com/t/" + (Number(document.location.href.replace(/https://www.v2ex.com/t/(d?)/i, "$1"))+1)
window.location.href.substring(23,29) * 1 + 1
location.href=location.href.split(/[/#]/)[4]*1+1
location.pathname.substring(3)
判断一个单词是否是回文
function checkPalindrom(str) {
return str == str.split("").reverse().join("");
}
去掉一组整型数组重复的值
let unique = function(arr) {
let hashTable = {};
let data = [];
for(let i=0,l=arr.length;i
统计一个字符串出现最多的字母
function findMaxDuplicateChar(str) {
if(str.length == 1) {
return str;
}
let charObj = {};
for(let i=0;i= maxValue) {
maxChar = k;
maxValue = charObj[k];
}
}
return maxChar;
}
生成斐波那契数组
function getFibonacci(n) {
var fibarr = [];
var i = 0;
while(i
闭包
var myObject = {
foo: "bar",
func: function() {
var self = this;
console.log("outer func: this.foo = " + this.foo);
console.log("outer func: self.foo = " + self.foo);
(function(test) {
console.log("inner func: this.foo = " + test.foo); //"bar"
console.log("inner func: self.foo = " + self.foo);
}(self));
}
};
myObject.func();
for(var i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i); // 555555
}, 1000);
}
for(var i = 0; i < 5; i++) {
(function(i) {
setTimeout(function() {
console.log(i); //0 , 1 , 2 , 3 , 4
}, 1000);
})(i)
}
function add(num1, num2){
let r1, r2, m;
r1 = (""+num1).split(".")[1].length;
r2 = (""+num2).split(".")[1].length;
m = Math.pow(10,Math.max(r1,r2));
return (num1 * m + num2 * m) / m;
}
console.log(add(0.1,0.2)); //0.3
console.log(add(0.15,0.2256)); //0.3756
10 的阶乘
console.log((function f(n){return ((n > 1) ? n * f(n-1) : n)})(10));
逻辑与返回第一个是 false 的操作数 或者 最后一个是 true 的操作数
如果某个操作数为 false ,则该操作数之后的操作数都不会被计算
console.log(1 && 2 && 0); //0
console.log(1 && 0 && 1); //0
console.log(1 && 2 && 3); //3
逻辑或返回第一个是 true 的操作数 或者 最后一个是 false 的操作数
console.log(1 || 2 || 0); //1
console.log(0 || 2 || 1); //2
console.log(0 || 0 || false); //false
如果某个操作数为 true ,则该操作数之后的操作数都不会被计算
如果逻辑与和逻辑或作混合运算,则逻辑与的优先级高
if 中,[] 和 {} 都表现为 true
Unicode 编码转换
function encodeUTF8(str){
var temp = "",rs = "";
for( var i=0 , len = str.length; i < len; i++ ){
temp = str.charCodeAt(i).toString(16);
rs += "u"+ new Array(5-temp.length).join("0") + temp;
}
return rs;
}
function decodeUTF8(str){
return str.replace(/(u)(w{4}|w{2})/gi, function($0,$1,$2){
return String.fromCharCode(parseInt($2,16));
});
}
encodeUTF8("中文")
"u4e2du6587"
decodeUTF8("u4e2du6587")
"中文"
//https://segmentfault.com/q/1010000000095710
var decToHex = function(str) {
var res=[];
for(var i=0;i < str.length;i++)
res[i]=("00"+str.charCodeAt(i).toString(16)).slice(-4);
return "u"+res.join("u");
}
var hexToDec = function(str) {
str=str.replace(//g,"%");
return unescape(str);
}
var decodeHtmlEntity = function(str) {
return str.replace(/&#(d+);/g, function(match, dec) {
return String.fromCharCode(dec);
});
};
var str = "JavaScript高级程序设计";
console.log(decodeHtmlEntity(str));//JavaScript高级程序设计
var encodeHtmlEntity = function(str) {
var buf = [];
for (var i=str.length-1;i>=0;i--) {
buf.unshift(["&#", str[i].charCodeAt(), ";"].join(""));
}
return buf.join("");
};
var str = "高级程序设计";
console.log(encodeHtmlEntity(str));//高级程序设计
function u2str(text){
return $("").html(text).text();
}
数组反转
var test = [
[1, 0, 4, 3, 2],
[0, 4, 3, 2, 1],
[4, 3, 2, 1, 0],
[3, 2, 1, 0, 4]
];
test.forEach(arr => console.log(reversal(arr)));
// 反转
function reversal(arr) {
let len = arr.length;
// get max
let max = arr[0];
let index = 0;
arr.forEach((v, i) => {
if (v <= max) return;
max = v;
index = i;
});
// strat re
let tmp = arr.reverse().concat(arr, arr);
let newIndex = len - 1 - index + len;
return tmp.slice(newIndex - index, newIndex + len - index);
}
var arr = [1, 0, 4, 3, 2];
反转为
var arr = [2, 3, 4, 0, 1];
chrome console
dir($("selector")) 会返回匹配选择器的DOM元素的所有属性
获取某个DOM元素绑定的事件 getEventListeners($("#firstName")).click[0].listener
深拷贝 对象和数组
var cloneObj = function(obj){
var str, newobj = obj.constructor === Array ? [] : {};
if(typeof obj !== "object"){
return;
} else if(window.JSON){
str = JSON.stringify(obj), //系列化对象
newobj = JSON.parse(str); //还原
} else {
for(var i in obj){
newobj[i] = typeof obj[i] === "object" ?
cloneObj(obj[i]) : obj[i];
}
}
return newobj;
};
//jQuery.extend第一个参数可以是布尔值,用来设置是否深度拷贝的:
jQuery.extend(true, { a : { a : "a" } }, { a : { b : "b" } } );
jQuery.extend( { a : { a : "a" } }, { a : { b : "b" } } );
ajax提交2个相同的键值
在form表单中有两个同name名为"tag",然后在ajax提交的时候直接用serialize进行了序列化
$.post("url", {
tags: 7,
tags: 128,
})
或者
var str="tags=7&tags=128";
$.ajax({
type:"post",
url:"http://localhost/",//地址自己改
data:str,
async:true
});
精度丢失
str = "{"a":1234567890123456789,"b":1234567890123239}";
str = str.substr(1);
str = str.substr(0,str.length-1);
str.split(",");
arr = str.split(",");
obj = {};
arr.forEach(function(el,index){
var arr1 = el.split(":");
//obj[arr1[0]]=""+arr1[1];
obj[arr1[0]]=(Number.isSafeInteger(arr1[1])?arr1[1]:(""+arr1[1]));
});
console.dir(obj);
var str = "{"a":1234567890123456789, "b": 1234567890123456789, "c": 1234567890123456789}";
var json = JSON.parse(str.replace(/: *(d*?) *(,|})/g, (a, b, c) => `:"${b}"${c}`));
console.log(json);
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/90973.html
摘要:不包括作为其嵌套函数的被解析的源代码。作用域链当代码在一个环境中执行时,会创建变量对象的一个作用域链。栈结构最顶层的执行环境称为当前运行的执行环境,最底层是全局执行环境。无限制函数上下文。或者抛出异常退出一个执行环境。 前言 其实规范这东西不是给人看的,它更多的是给语言实现者提供参考。但是当碰到问题找不到答案时,规范往往能提供想要的答案 。偶尔读一下能够带来很大的启发和思考,如果只读一...
摘要:引擎会执行其执行环境位于堆栈顶部的函数。当函数执行完毕时,当前执行栈会从堆栈中弹出去,并且控件将会到达其在当前堆栈下面的那个执行环境中。当完成以后,它的执行环境会会从堆栈中移出,并且控件会到达全局执行环境。 如果你想成为一个Javascript开发者,那么你一定要知道Javascript程序的内部运行原理。理解执行环境和执行栈是非常重要的,其有助于理解其他Javascript的概念,比...
摘要:函数是对象理解函数是对象,是准确理解函数的第一步。在中,函数对象和其他对象一样,均被视为一等公民。当函数执行完毕,其执行环境从栈中弹出并销毁。此时的函数充当构造器的角色。调用函数对象的方法并将结果赋给。 函数是javascript中最重要的内容,也是其相对其他语言来说在设计上比较有意思的地方。javascript许多高级特性也或多或少和函数相关。本文将以函数为中心,对函数的各个关键知识...
摘要:运行执行上下文正在使用的执行上下文。顶部是正在执行的上下文当执行完毕,它的执行上下文自动从栈弹出,控制流程按顺序到达全局执行上下文。一旦所有代码执行完毕,引擎从当前栈中移除全局执行上下文。在全局执行上下文中,的值指向全局对象。 https://juejin.im/post/5ba321...https://juejin.im/entry/59986...我只是搬运工,看了他们的文章后深...
摘要:将消息记录到控制台和来说,可通过对象向控制台中写入消息。如常见的错误操作终止无效字符未找到成员未知运行时错误语法错误系统无法找到指定资源 将消息记录到控制台 console IE8、Firefox、Chrome和Safari来说,可通过console对象向JavaScript控制台中写入消息。对象有下列方法: error(message):将错误消息记录到控制台 info(messa...
摘要:温馨提示作者的爬坑记录,对你等大神完全没有价值,别在我这浪费生命温馨提示续本文将会成为一篇笔记类型的文章,记录闭包具体的应用方式温馨提示再续本文存在错误,会慢慢改进的,请不要把我说的当真在上一篇博文闭包不完全探索记录闭包啥馅的中,对中 温馨提示:作者的爬坑记录,对你等大神完全没有价值,别在我这浪费生命温馨提示-续:本文(maybe)将会成为一篇笔记类型的文章,记录闭包具体的应用方式温馨...
阅读 3287·2023-04-26 02:27
阅读 2175·2021-11-22 14:44
阅读 4157·2021-10-22 09:54
阅读 3231·2021-10-14 09:43
阅读 785·2021-09-23 11:53
阅读 13005·2021-09-22 15:33
阅读 2750·2019-08-30 15:54
阅读 2747·2019-08-30 14:04