摘要:中的多態(tài)不存在重載,方法名一樣,后面的會(huì)把前面的覆蓋掉,最后只保留一個(gè)方法。
1、查找作用域
當(dāng)前函數(shù)在哪個(gè)作用域下定義的,那么他的上級(jí)作用域就是誰(shuí) ?, 和函數(shù)在哪執(zhí)行沒(méi)有任何關(guān)系
//作用域?qū)嵗?var num = 12; function fn(){ var num = 120; return function(){ console.log(num); } } var f = fn(); f();//->120 (function(){ var num = 1200; f();//->120 }())2、++i 和 i++的區(qū)別
//實(shí)例說(shuō)明 var i = 5; 5 + i++ //->10 //i++ 是先運(yùn)算i本身再加1 //======== var j = 5; 5 + (++j) //->11 //++j 是本身先加1再運(yùn)算 //面試題 var n = 2; var num = 5 + (++n) + (n++) + (n++) + (++n); // - > 213、預(yù)解釋
在js執(zhí)行之前,瀏覽器首頁(yè)會(huì)把帶var和function的關(guān)鍵字進(jìn)行提前申明或定義;var(只是提前申明) function(提前申明+定義)
注:如果在全局作用域下定義一個(gè) num = 10(沒(méi)有var)和帶var 是有區(qū)別的
//實(shí)例說(shuō)明 console.log(num);//->undefined console.log(num1);//->num1 is not defined var num = 10;//->先預(yù)解釋->window.num = 10 num1 = 10;//->window.num1 = 10 //不帶var的num1沒(méi)有提前申明所以報(bào)is not definend
預(yù)解釋面試題
//實(shí)例1 function a(b){ alert(b); function b(){ alert(b); } b(); } a(1); //1->alert(b函數(shù)),2->alert(函數(shù)) //實(shí)例2 alert(a); //undefined var a = 0; alert(a); //0 function fn(){ alert(a); //0;因?yàn)闆](méi)var, 所以這里的a會(huì)被看作是全局的,往上查找,找到a=0,所以是0,如果全局也沒(méi)有就會(huì)報(bào)錯(cuò) a = 2; alert(a); //2 } fn() alert(a); //2,fn把這全局的a修改了 //實(shí)例34、區(qū)分this
函數(shù)執(zhí)行,首先看函數(shù)名是否有".",有的話,"."前面是誰(shuí)this就是誰(shuí);沒(méi)有的話this就是window
自執(zhí)行函數(shù)的this永遠(yuǎn)是window
給元素的某一個(gè)事件綁定方法,當(dāng)事件觸發(fā)的時(shí)候,執(zhí)行對(duì)應(yīng)的方法,方法中的this是當(dāng)前的元素
構(gòu)造函數(shù)中的this是這個(gè)類的實(shí)例
this還可以通過(guò)call、apply、bind來(lái)改變
function fn(){ console.log(this); } var obj = { name:"李四", writeJs:fn } obj.writeJs();//this->obj var fn = obj.writeJs; fn();//this->window function sum() { fn();//this->window } sum(); (function() { fn();//this->window )() document.getElementById("div").onclick = fn;//this->#div document.getElementById("div").onclick = function() { //this->#div fn();//this->window }
this綜合實(shí)例(360面試題)
var num = 20; var obj = { num: 30, fn: (function (num) { this.num *= 3; num += 15; var num = 45; return function () { this.num *= 4; num += 20; console.log(num); } }) (num) } var fn = obj.fn; fn();//65 obj.fn();//855、單例模式
描述同一個(gè)事物(同一個(gè)對(duì)象)的屬性和方法放在一個(gè)內(nèi)存空間下,起到分組的作用,這樣不同事物之間的屬性名相同,相互也不會(huì)發(fā)生沖突,我們把這種分組編寫代碼的模式叫做“單例模式”;
var obj = { name: "張三", age: "18", writeJs: function(){ console.log("my is "+this.name+" can write js"); } } obj.writeJs();
注:obj又叫做“命名空間”,單例模式項(xiàng)目開發(fā)經(jīng)常使用,我們可以使用單例模式進(jìn)行模塊化開發(fā);6、工廠模式
單例模式雖然能解決分組作用,但是不能實(shí)現(xiàn)批量生產(chǎn),屬于手工作業(yè)模式;
工廠模式->“函數(shù)的封裝”,“低耦合高內(nèi)聚”:減少頁(yè)面中的冗余代碼,提高代碼的重復(fù)利用
function createJs(name,age){ var obj = {}; obj.name = name; obj.age = age; obj.writeJs = function(){ console.log("my is "+ this.name +" can write js"); } return obj; } var zhangsan = createJs("張三","18"); zhangsan.writeJs();
所有的編程語(yǔ)言都是面向?qū)ο箝_發(fā)的。就有類的繼承、封裝、多態(tài)
繼承:子類繼承父類的屬性和方法
封裝:函授的封裝
多態(tài):當(dāng)前方法的多種形態(tài)
后臺(tái)語(yǔ)言中的多態(tài)包含重載和重寫。js中的多態(tài)不存在重載,方法名一樣,后面的會(huì)把前面的覆蓋掉,最后只保留一個(gè)方法。(js中有一個(gè)類似重載但不是重載:可以根據(jù)傳遞的參數(shù)不一樣,實(shí)現(xiàn)不同的功能)重寫:子類重寫父類的方法
7、構(gòu)造函數(shù)模式構(gòu)造函數(shù)是通過(guò)new關(guān)鍵詞創(chuàng)建一個(gè)實(shí)例;
var ex = new CreateJs();其中ex就是CreateJs的實(shí)例,生成CreateJs這個(gè)類;
Js中所有的類都是函數(shù)數(shù)據(jù)類型,它通過(guò)new執(zhí)行變成一個(gè)類,但是他本身也是個(gè)普通的函數(shù)
Js中所有的實(shí)例都是對(duì)象數(shù)據(jù)類型
在構(gòu)造函數(shù)模式中,類中出現(xiàn)的this.xxx=xxx中this是當(dāng)前類的一個(gè)實(shí)例
不同實(shí)例之間方法不一樣(下例)
在構(gòu)造函數(shù)模式中,瀏覽器會(huì)默認(rèn)把我們的實(shí)例返回(返回對(duì)象數(shù)據(jù)類型的值);如果我們手動(dòng)寫return返回;
如果ruturn是一個(gè)基本數(shù)據(jù)類型的值,當(dāng)前實(shí)例不變,例如:return 10;
如果return是一個(gè)引用數(shù)據(jù)類型的值,當(dāng)前實(shí)例會(huì)被自己返回的值替換,例如:ruturn {name:"張三"}
檢測(cè)某個(gè)實(shí)例是否屬于這個(gè)類 instanceof;
zhangsan instancaof CreateJs->true
in:檢測(cè)某一個(gè)屬性是否屬于這個(gè)對(duì)象 attr in object,不管是私有屬性還是共有屬性,只要存在,用in檢測(cè)都是true
hasOwnProperty:用來(lái)檢測(cè)某一個(gè)屬性是否為這個(gè)對(duì)象的私有屬性,這個(gè)方法只能檢測(cè)私有屬性 obj.hasOwnProperty(attr);
function CreateJs(name,age) { this.name = name; this.age = age; this.writeJs = function() { console.log("my is "+ this.name +" can write js"); } } var zhangsan = new CreateJs("張三","18"); zhangsan.writeJs(); var lisi = new CreateJs("李四","20"); lisi.writeJs(); zhangsan.writeJs === lisi.writeJs//false8、原型鏈模式
每一個(gè)函數(shù)數(shù)據(jù)類型(普通函數(shù)、類)都有一個(gè)天生自帶的屬性:prototype(原型),并且這個(gè)屬性是一個(gè)對(duì)象數(shù)據(jù)類型的值;
prototype上瀏覽器天生給它加了個(gè)屬性constructor(構(gòu)造函數(shù)),屬性值是當(dāng)前函數(shù)(類)本身;
每一對(duì)象數(shù)據(jù)類型(普通對(duì)象、實(shí)例、prototype..)天生自帶一個(gè)屬性__proto__,屬性值是當(dāng)前實(shí)例所屬類的prototype(原型)
Object是Js中所有對(duì)象的基類,Object.prototype上沒(méi)有__proto__這個(gè)屬性
function CreateJs(name,age) { this.name = name; this.age = age; } CreateJs.prototype.writeJs = function() { console.log("my is "+ this.name +" can write js"); } var zhangsan = new CreateJs("張三","18"); zhangsan.writeJs(); var lisi = new CreateJs("李四","20"); lisi.writeJs(); zhangsan.writeJs === lisi.writeJs//true
通過(guò)對(duì)象名.屬性名獲取屬性值的時(shí)候,首先在對(duì)象的私有屬性找,如果私有屬性存在,則獲取的是私有屬性值;
如果私有沒(méi)有,則通過(guò)__proto__找到所屬類的原型,原型上存在的話獲取的是公有的屬性值;
如果原型上也沒(méi)有,則繼續(xù)通過(guò)原型上的__proto__繼續(xù)向上查找,一直找到Object.protoype為止
9、call、apply、bind使用call、apply的區(qū)別
對(duì)于 apply、call 二者而言,作用完全一樣,只是接受參數(shù)的方式不太一樣。
func.call(this, arg1, arg2); func.apply(this, [arg1, arg2])
實(shí)例:
//1、數(shù)組之間追加 var array1 = [12 , "foo" , {name "Joe"} , -2458]; var array2 = ["Doe" , 555 , 100]; Array.prototype.push.apply(array1, array2); /* array1 值為 [12 , "foo" , {name "Joe"} , -2458 , "Doe" , 555 , 100] */ //2、獲取數(shù)組中的最大值最小值(數(shù)組中本身沒(méi)有max方法) var numbers = [5, 458 , 120 , -215 ]; var maxInNumbers = Math.max.apply(Math, numbers), //458 maxInNumbers = Math.max.call(Math,5, 458 , 120 , -215); //458 //3、檢驗(yàn)數(shù)據(jù)類型 Object.prototype.toString.call(obj) === "[object Array]" ; //4、類數(shù)組轉(zhuǎn)數(shù)組 var domNodes = Array.prototype.slice.call(document.getElementsByTagName("*"));
bind
bind()方法會(huì)創(chuàng)建一個(gè)新函數(shù),稱為綁定函數(shù),當(dāng)調(diào)用這個(gè)綁定函數(shù)時(shí),綁定函數(shù)會(huì)以創(chuàng)建它時(shí)傳入 bind()方法的第一個(gè)參數(shù)作為 this,傳入 bind() 方法的第二個(gè)以及以后的參數(shù)加上綁定函數(shù)運(yùn)行時(shí)本身的參數(shù)按照順序作為原函數(shù)的參數(shù)來(lái)調(diào)用原函數(shù)
var bar = function(){ console.log(this.x); } var foo = { x:3 } bar(); // undefined //bind是先綁定this和參數(shù),不執(zhí)行本身函數(shù) //call和apply是綁定this和參數(shù)后立即執(zhí)行本身函數(shù) var func = bar.bind(foo); func(); // 310、計(jì)算數(shù)組中最大值
var arr = [12,43,2323,455,23,5]; arr.sort(function(x,y) { return x-y; }) var max = arr[arr.length-1]; var arr1 = [123,34,54,23,56,1]; var max = arr1[0]; for(var i = 0;i < arr1.length;i++ ) { var cur = arr1[i]; if(cur>max) { max = cur[i]; } } var arr2 = [23,43,123,341,3233]; var max = Math.max.apply(null,arr2); var arr3 = [567,23,42,45,1,98]; var max = eval("Math.max("+arrr.toString()+")");11、數(shù)組求平均數(shù)
function avgFn() { var arr = Array.prototype.slice.apply(arguments); arr.sort(function(x,y) { return x - y; }) arr.shift() arr.pop(); var arg =(eval(arr.join("+"))/arr.length).toFixed(2) return arg; } avgFn(68,97,97,91,99.1,89.5,98.23) function avgFn() { var arr = [].sort.call(arguments,function(x,y) { return x-y; }); [].shift.call(arguments); [].pop.call(arguments); return (eval([].join.call(arguments,"+"))/arguments.length).toFixed(2); } avgFn(68,97,97,91,99.1,89.5,98.23)12、sort的深入
arr.sort();只能默認(rèn)排序10以內(nèi)的數(shù)字和26字母排序
var arr = [1,3,4,65,23,32,43,567]; arr.sort();//log->[1, 23, 3, 32, 4, 43, 567, 65] var arr1 = [2,5,6,4,9,1.2,0.9]; arr1.sort();//log->[0.9, 1.2, 2, 4, 5, 6, 9] var arr2 = ["a","y","b","t","p","c"]; arr2.sort();//log->["a", "b", "c", "p", "t", "y"]
arr.sort(function(){})傳遞參數(shù)
var arr = [1,3,4,65,23,32,43,567]; arr.sort(); /** *執(zhí)行中a和b的值 *a b *1 3 *3 4 *4 65 *65 23 *4 23 *65 32 *23 32 *65 43 *32 43 *65 567 *a - b > 0 a和b調(diào)換位置 *a - b <= 0 位置不變 */ arr.sort(function(a,b){ return a - b; }) arr.sort(function(a,b){ return b - a; })
利用localeCompare字母排序
localeCompare第一個(gè)字符串字母按照26個(gè)字母順序排序,如果第一個(gè)字母相同會(huì)按照第二個(gè)字母排序以此類推,漢字會(huì)先轉(zhuǎn)換成拼音再排序,如果漢字同音會(huì)按照漢字unicode順序排
"a".localeCompare("b") //-1 "c".localeCompare("b") //1 var arr = [{name:"wangwu",age:17},{name:"lisi",age:17},{name:"dahuang",age:21}]; arr.sort(function(a,b){ return a.name.localeCompare(b.name); }) //[{name:"dahuang",age:21},{name:"lisi",age:17},{name:"wangwu",age:17}] var arr = [{name:"小呂",age:17},{name:"老王",age:17},{name:"大黃",age:21}]; arr.sort(function(a,b){ return a.name.localeCompare(b.name); }) //[{name:"大黃",age:21},{name:"老王",age:17},{name:"小呂",age:17}]13、DOM回流(重排 reflow)、DOM重繪、DOM映射
DOM回流:DOM樹渲染完畢以后,只要頁(yè)面中的HTML結(jié)構(gòu)發(fā)生變化(增加刪除元素、位置發(fā)生變化),瀏覽器都要重新計(jì)算一遍最新的DOM結(jié)構(gòu),重新對(duì)當(dāng)前頁(yè)面進(jìn)行渲染;
DOM重繪:DOM樹位置不發(fā)生變化,如元素的顏色背景發(fā)生變化,會(huì)只針對(duì)這個(gè)元素渲染,不渲染整個(gè)頁(yè)面
DOM映射:頁(yè)面中的標(biāo)簽和Js中獲取到的元素對(duì)象(元素集合)是緊緊綁定在一起的,頁(yè)面中HTML結(jié)構(gòu)改變了,Js不需要重新獲取,集合里面的內(nèi)容也會(huì)跟著自動(dòng)改變
14、js中數(shù)據(jù)綁定的方法1、動(dòng)態(tài)創(chuàng)建節(jié)點(diǎn)方式
var oUl = document.getElementById("ul"); var oLi = document.createElement("li"); oLi.innerHTML = "hello world"; oUl.appendChild(oLi);
2、字符串拼接的方式
var oUl = document.getElementById("ul"); var str = ""; for(var i = 0;i < arr.length; i++) { str += "
3、文檔碎片方式
var oUl = document.getElementById("ul"); var frg = document.createDocumentFragment();//創(chuàng)建一個(gè)文檔碎片 var oLi = document.createElement("li"); oLi.innerHTML = "hello world"; frg.appendChild(oLi); oUl.appendChild(frg); frg = null;//手動(dòng)清空碎片15、正則 什么是正則
它是一個(gè)規(guī)則,用來(lái)處理字符串的規(guī)則。正則的創(chuàng)建
1. 字面量創(chuàng)建
var reg = /d/;
2. 實(shí)例創(chuàng)建
var reg = new RegExp("d");元字符
每一個(gè)正則表達(dá)式都是由元字符和 修飾符組成
具有特殊意義的元字符
:轉(zhuǎn)義后面字符所代表的含義
^ :以某一個(gè)元字符開始
$ :以某一個(gè)元字符結(jié)束
n :匹配一個(gè)換行符
. :除了n以外的任意字符
() :分組
x|y :x或y中的一個(gè)
[xyz] :x或者y或者z中的任何一個(gè)字符
[a-z] :a-z之間的任意字符
[^a-z]:除了a-z之間的任何字符 d :一個(gè)0-9之間的任何數(shù)字 :匹配一個(gè)邊界符 w :數(shù)字字母下劃線中的任意一個(gè)字符 s:匹配一個(gè)空白字符 空格、制表符、換頁(yè)符...
代表出現(xiàn)次數(shù)的量詞元字符
* :出現(xiàn)0到多次
+ :出現(xiàn)1到多次
? :出現(xiàn)0到1次
{n} :出現(xiàn)n次
{n,} :出現(xiàn)n到多次
{n,m} :出現(xiàn)n到m次
()分組的作用改變x|y的優(yōu)先級(jí)
var reg = /^18|19$/; //18、19、181、189、119、819、1819....true var reg = /^(18|19)$/; //18、19true
分組引用
var reg = /^(w)1(w)2$/; reg.test("aabb")//true reg.test("abcd")//false //1代表和第一個(gè)分組出現(xiàn)一模一樣的內(nèi)容 //2代表和第二個(gè)分組出現(xiàn)一模一樣的內(nèi)容 //去除重復(fù)的字符 var str = "aaaabbbbccccffffdffffdssss440000008888"; str.replace(/(w)1+/g,"$1"); //"abcds408"
分組捕獲
正則在捕獲的時(shí)候,不僅僅把大正則匹配到,而且還可以把小分組的內(nèi)容捕獲到
var reg = /^(d{2})(d{4})(d{4})(d{4})d{2}(d{1})[d|X]$/ var arr = reg.exec("100604198805112411"); //["100604198805112411", "10", "0604", "1988", "0511", "1"] //100604198805112411大正則匹配的內(nèi)容 //"10", "0604", "1988", "0511", "1"小分組匹配
[](1)、在中括號(hào)中出現(xiàn)的所有的字符都是代表本身意義的字符(沒(méi)有特殊的含義)(2)、中括號(hào)不識(shí)別兩位數(shù)
var reg = /^[.]$/; reg.test("1");//false reg.test(".");//true var reg = /[12]/; //1||2 不是12 var reg = /^[21-57]$/; //2||1-5||7中的任意一個(gè)
//年齡介于[16-58] var reg = /^(1[6-9]|[2-4]d|5[0-8])$/; //簡(jiǎn)單的驗(yàn)證郵箱 var reg = /^[w.-]+@[da-zA-Z]+(.[a-zA-Z]{2,4}){1,2}$/; //中國(guó)標(biāo)準(zhǔn)真實(shí)姓名2-4位漢字 var reg = /^[u4e00-u9fa5]{2,4}$/; //身份證號(hào)碼 //100604198805112411 //10(省)0604(市區(qū)縣)19880511(出身年月)24(沒(méi)用)1(奇數(shù)男、偶數(shù)女)1(0-9||X) var reg = /^(d{2})(d{4})(d{4})(d{4})d{2}(d{1})[d|X]$/;正則的捕獲exec
捕獲的內(nèi)容是個(gè)數(shù)組
var reg = /d+/; reg.exec("ducen23niubi21"); //0:"23",index:5,input:"ducen23niubi"
正則捕獲的特點(diǎn)
懶惰型:每一次執(zhí)行exec只捕獲第一個(gè)匹配的內(nèi)容,在不進(jìn)行任何處理的情況下,在執(zhí)行多次捕獲,捕獲的還是第一個(gè)匹配的值
var reg = /d+/ reg.lastIndex//0 res = reg.exec("ducen23niubi12")//["23"] reg.lastIndex//0 res = reg.exec("ducen23niubi12")//["23"]
//解決懶惰性,在正則后加修飾符g var reg = /d+/g reg.lastIndex//0 res = reg.exec("ducen23niubi12")//["23"] reg.lastIndex//7 res = reg.exec("ducen23niubi12")//["12"] reg.lastIndex//14 res = reg.exec("ducen23niubi12")//null
貪婪性:正則每一次捕獲都是按照匹配最長(zhǎng)的結(jié)果
var reg = /d+/; res = reg.exec("ducen2017niubi12"); //捕獲到的是["2017"]而不是2 //解決正則的貪婪性(在量詞元字符后面添加一個(gè)?) var reg = /d+?/; res = reg.exec("ducen2017niubi12"); //捕獲的是["2"];
++?在正則中有很多作用,放在一個(gè)不同的元字符后面代表出現(xiàn)0-1次 /d?/(數(shù)字出現(xiàn)一次或不出現(xiàn));放在一個(gè)量詞的元字符后面是取消捕獲的貪婪性++
正則的修飾符(g、i、m)var reg = /d/gim //g:全局匹配 //i:忽略大小寫匹配 //m:多行匹配
var reg = /d+/g var arr = [] res = reg.exec("ducen23niubi12"); while(res) { arr.push(res[0]); res = reg.exec("ducen23niubi12") } arr//["23", "12"]字符串中的match方法
把所有和正則匹配的字符都獲取到
var reg = /d+/g var arr = "ducen23niubi12".match(reg); arr//["23", "12"]
雖然在當(dāng)前的情況下match比我們的exec更加簡(jiǎn)便一些,但是match中存在一些自己處理不了的問(wèn)題:在分組捕獲的情況下,match只能捕獲大正則匹配的內(nèi)容,而對(duì)小正則捕獲的內(nèi)容無(wú)法獲取
字符串中的replace方法var str = "ducen2015ducen2016"; str.replace("ducen","huming"); //"huming2015ducen2016" str.replace(/ducen/g,function(arg){ console.log(arguments); return "huming"; }) //"huming2015huming2016" str.replace(/ducen(d+)/g,function(arg){ console.log(arguments) console.log(arguments[1])//2015 2016 獲取小正則 })
replace中的匿名函數(shù)執(zhí)行次數(shù),取決于正則捕獲的次數(shù)
每一次執(zhí)行匿名函數(shù)里面?zhèn)鬟f的參數(shù)值arguments和我們自己通過(guò)exec捕獲到的結(jié)果是非常類似的(即使正則有分組,我們也可以通過(guò)arguments獲?。?/strong>
return:你返回的結(jié)果是啥,就相當(dāng)于把當(dāng)前大正則捕獲的內(nèi)容替換成返回的內(nèi)容
var arr = ["零","壹","貳","叄","肆","伍","陸","柒","捌","玖"] var s = "20170401"; s.replace(/d/g,function(){ return arr[arguments[0]] })
//1 "2343289".replace(/^(d{1,3})((?:d{3})+)$/,function(){ return arguments[1]+"," + arguments[2].replace(/(d){3}(?!$)/g,function(){ return arguments[0]+ "," }) }) //2 var str = "2343289"; str.replace(/(d)(?!$)/g,function(res,i){ if((str.length-i-1)%3==0) { return res+ "," }else{ return res; } }) //3 var str = "2343289"; str = str.split("").reverse().join(""); str = str.replace(/(d{3})/g,"$1,"); str.split("").reverse().join("");正則中?的用法
在量詞后面代表0到1次(?)
var reg = /^(+|-)?d+(.d+)?$/;
匹配不捕獲(?:)
var reg = /^(?:+|-)?d+(.d+)?$/
取消正則貪婪捕獲,把?放在量字后面(?)
var reg = /d+/; res = reg.exec("ducen2017niubi12"); //捕獲到的是["2017"]而不是2 //解決正則的貪婪性(在量詞元字符后面添加一個(gè)?) var reg = /d+?/; res = reg.exec("ducen2017niubi12"); //捕獲的是["2"];
正向預(yù)查、負(fù)向預(yù)查(條件)
(?!n)->匹配任何其后緊接指定字符串 n 的字符串。 (?=n)->匹配任何其后沒(méi)有緊接指定字符串 n 的字符串。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/82391.html
摘要:小弟在前端摸爬滾打一段時(shí)間,發(fā)現(xiàn)前端的比較好的文檔比較分散,特別是中文的,我平時(shí)都是收藏在瀏覽器里,以后有好的教程和綜合性的文檔我會(huì)更新到這里。小組中文文檔,很全。 小弟在前端摸爬滾打一段時(shí)間,發(fā)現(xiàn)前端的比較好的文檔比較分散,特別是中文的,我平時(shí)都是ctrl+D收藏在瀏覽器里,以后有好的教程和綜合性的文檔我會(huì)更新到這里。一則可以做個(gè)記錄,防止丟失。二則有需要的朋友可以來(lái)我這里找一找。 ...
摘要:給初學(xué)者的印象總是那么的雜而亂,相信很多初學(xué)者都在找輕松學(xué)習(xí)的途徑。通常學(xué)了很久的基礎(chǔ)之后,變量函數(shù)對(duì)象你也都略知一二,但一到公司開發(fā)項(xiàng)目的時(shí)候,卻又難以下手。 Js給初學(xué)者的印象總是那么的雜而亂,相信很多初學(xué)者都在找輕松學(xué)習(xí)Js的途徑。在這里給大家總結(jié)一些學(xué)習(xí)Js的經(jīng)驗(yàn),希望能給后來(lái)的學(xué)習(xí)者探索出一條輕松學(xué)習(xí)Js之路。Js給人那種感覺(jué)的原因多半是因?yàn)樗缦碌奶攸c(diǎn):A:本身知識(shí)很抽象、...
摘要:個(gè)人前端文章整理從最開始萌生寫文章的想法,到著手開始寫,再到現(xiàn)在已經(jīng)一年的時(shí)間了,由于工作比較忙,更新緩慢,后面還是會(huì)繼更新,現(xiàn)將已經(jīng)寫好的文章整理一個(gè)目錄,方便更多的小伙伴去學(xué)習(xí)。 showImg(https://segmentfault.com/img/remote/1460000017490740?w=1920&h=1080); 個(gè)人前端文章整理 從最開始萌生寫文章的想法,到著手...
閱讀 523·2021-10-09 09:44
閱讀 2108·2021-09-02 15:41
閱讀 3561·2019-08-30 15:53
閱讀 1840·2019-08-30 15:44
閱讀 1295·2019-08-30 13:10
閱讀 1202·2019-08-30 11:25
閱讀 1481·2019-08-30 10:51
閱讀 3372·2019-08-30 10:49