摘要:下面所有的東西都不為堆高我的編程能力,所以我只是把對的認識用最粗鄙的語言進行講解和記錄,所以,閱讀需謹慎執行在執行之前會先進行編譯。所以對純前端尤其值得一提,不僅要知道怎么進行數據類型的轉換更要清楚的知道你當下在操作的是什么數據類型。
下面所有的東西都不為堆高我的編程能力,所以我只是把對JS的認識用最粗鄙的語言進行講解和記錄,所以,閱讀需謹慎!
JS執行
JS在執行之前會先進行編譯。這第一句話都可能被我帶壞了,畢竟市面上都是說JS是動態的解釋執行語言,但那又如何?!知道JS在執行之前是先進行‘編譯’的就好。且看下面
console.log(a);//undefined //把它復制到js文件里,并對下面一行打上斷點,看控制臺輸出的是什么?undefined!說明在執行前進行了‘編譯’ //提醒:最好是在沒有安裝插件的瀏覽器環境執行,要不控制臺可能會出現因插件帶來的異常信息 console.log(b);//Uncaught ReferenceError: b is not defined var a="a";
對于上面的代碼還要注意:
JS存在變量提升的行為,即會把聲明的變量提升到當前執行上下文的最頂端
所以console.log(a)輸出的是undefined,注意!是undefined!不是a!變量提升提升的是變量的聲明,而不是先執行var a="a"這句話。而console.log(b)卻會拋出一個異常,雖然都是‘沒定義’但一定要分清a是undefined,b是not defined是變量沒有聲明,是一個會阻塞JS執行的ReferenceError異常
另外ReferenceError異常同作用域判斷失敗相關
堆棧
不要問我什么是堆棧,我也不知道,不過我通常這么理解:堆,是存放數據的堆內存;棧就是用來執行的盒子容器(真的會被我帶壞,哈哈哈),這里講棧,其實通俗來說,棧就是堆棧。
棧遵循先進后出,后進先出的特點,進出的是執行上下文,最先進入的全局上下文,并且在瀏覽器關閉時才被彈出
JS雖說是單線程的,但也能實現一些異步特性,進入堆棧的就有這么兩種情況:同步情況和異步情況
同步情況當然是當下進入
異步情況常見的包括兩種:延時和事件監聽,事件監聽常如AJAX,當他們的回掉函數執行時才創建其執行的上下文放入棧中:
setTimeout(function () { console.log(1); }); console.log(2);
是不是先打印的2?雖然這里并沒有設置時長,但依舊先執行console.log(2),這便是堆棧的機制,JS執行的機制表現
作用域這個東西簡單、老生常談,但如果稍不留意還是會經常出錯,然而這里我只說幾點不直觀的演示和講解
變量提升會先提升函數然后才是變量,見下
fa();//fa fb();//Uncaught TypeError: fb is not a function //fb()的異常錯誤代表變量已被聲明且作用域判斷成功,但因還沒定義造成的用方錯誤 function fa() { console.log("fa"); } var fb=function () { console.log("fb"); };
所以,為了避免混亂,也是推薦的規范寫法,以后的函數聲明還是用變量聲明吧。
循環結構和條件結構的用花括號包裹的代碼塊并不會創建新的作用域,也不是真正的代碼塊,如下
(function(){ for(var i=0;i<6;i++){ if(i===3){ var b=i; return false; } console.log(b);//三次undefined } })();
注意:ES6的let const已做改進
類型不是說數據類型哈!
JS包括基本類型和引用類型
基本類型即直接存放在內存中的,可以直接訪問的,其包括number string boolean null undefined
引用類型即存放在內存中的對象,實際保存的是一個指針,一個引用,其包括object array function,且看下面的代碼
var a=[1,2,3,4]; var b=a; b[0]=6; console.log(a);//[6, 2, 3, 4]弱類型
這個沒什么好說的,但異常往往總是因此發生,哪怕不是什么復雜的工程。所以對純前端尤其值得一提,不僅要知道怎么進行數據類型的轉換更要清楚的知道你當下在操作的是什么數據類型。另外,建議使用全判斷,即如==替換為===
函數依舊不負責任的說:我不知道js一切皆對象是對是錯,該怎么表述它才是對的或錯的,但除原始值(或者上面說的基本類型)是對象是毫無疑問的,也正式如此,才讓函數能有多種身份:普通函數、對象的方法、對象的構造器、對象
—————————————————————占位————————————————————————
function免費配送了除了this之外的arguments參數,這個在我們不清楚該函數傳過來那些參數時比較有用
JS的數組其實是對象,是arraylike的對象,所以for等循環不僅可以操作數組也可以操作對象,所以也可以給數組添加非整型下標,另外數組的長度是根據整型作為下標的最大值+1得來的
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/84363.html
摘要:經過這段時間的反省,我也強烈的認識到自己的不足,也找到了相應的方式去改正自己。所以,在這里也給廣大正想尋求新的工作機會的你一些建議誠然面對自己,了解自己的優勢和劣勢。給自己做好定位。看清自己想要發展的方向。近期可能會經常性的更新基礎的東西。 北京的黃金三月,應去年的計劃,年初換工作,這是回來之后找工作的第四個周,目前收到offer一份,在昨天之前我還深深的覺得自己真的是失敗,菜的不行,...
摘要:歡迎來我的個人站點性能優化其他優化瀏覽器關鍵渲染路徑開啟性能優化之旅高性能滾動及頁面渲染優化理論寫法對壓縮率的影響唯快不破應用的個優化步驟進階鵝廠大神用直出實現網頁瞬開緩存網頁性能管理詳解寫給后端程序員的緩存原理介紹年底補課緩存機制優化動 歡迎來我的個人站點 性能優化 其他 優化瀏覽器關鍵渲染路徑 - 開啟性能優化之旅 高性能滾動 scroll 及頁面渲染優化 理論 | HTML寫法...
摘要:前言緣分與巧合,最近接觸比較多的培訓機構出來的人,以及看過關于培訓機構的文章和問答。大部分都對培訓機構很反感,其中還包括一些從培訓機構出來的人。造成這樣的情況,培訓機構的功勞無疑是最大的。 1.前言 緣分與巧合,最近接觸比較多的培訓機構出來的人,以及看過關于培訓機構的文章和問答。雖然沒在培訓機構上過課,但是接觸過很多培訓機構出來的人,也看過一些培訓機構的課程。關于培訓機構,我也有自己的...
閱讀 1174·2021-09-27 13:34
閱讀 981·2021-09-13 10:25
閱讀 511·2019-08-30 15:52
閱讀 3450·2019-08-30 13:48
閱讀 648·2019-08-30 11:07
閱讀 2167·2019-08-29 16:23
閱讀 1993·2019-08-29 13:51
閱讀 2328·2019-08-26 17:42