做者:Duomly
譯者:前端小智
來源:dev
點贊再看,微信搜索
【大遷世界】 關注這個沒有大廠背景,但有着一股向上積極心態人。本文
GitHub
https://github.com/qq44924588... 上已經收錄,文章的已分類,也整理了不少個人文檔,和教程資料。
在本文中,我收集了關於Javascript 最常被問到的 10 個問題及其答案。javascript
這10 個問題大多涉及 Javascript 的基礎知識,因此若是你剛剛開始學習 JS,最好理解並掌握它們並。前端
這個 10 問題涉及 JS 中閉包、promise,變量提高、類等等。儘管這些知識不是很難,可是知道答案是一件好事,由於其中一些常常在面試中會被問到。java
閉包是封閉在一塊兒的函數的組合,其中內部函數能夠訪問其變量和外部函數的變量。git
最簡單的解釋方法就是上例子:github
function outer() { var name = 'Maria'; function inner() { console.log(name); } inner(); } outer(); // 'Maria'
在上面的代碼中,你能夠看到inner()
函數能夠訪問其父函數變量name
。 所以,若是調用outer()
函數,那麼inner()
函數的console.log()
將返回name
的值Maria
。面試
內部函數能夠訪問外部函數參數對象,可是內部函數參數與外部同樣,則內部的參數對象會覆蓋外部的參數對象。以下所示:編程
function outer(a, b) { const inner = (a, b) => console.log(a, b); inner(1, 2); } outer('Alice', 'Mark'); // returns 1, 2
咱們使用閉包的主要緣由是返回能夠返回其餘函數的函數。數組
DOM 是文檔對象模型,它是網站的面向對象的表示形,可使用 Javascript 進行修改。promise
使用 JS 能夠操縱 DOM 元素,例如顏色,位置,大小。 爲了選擇頁面的特定元素,Javascript 提供了一些方法:微信
id
屬性選擇一個元素name
屬性選擇一個元素* querySelector() - 經過CSS選擇器選擇元素。
Javascript 還提供了其餘操做元素的方法,而不只僅是獲取元素,好比appendChild()
或innerHTML()
。
Promise 是異步編程的一種解決方案,能夠替代傳統的解決方案--回調函數和事件。ES6統一了用法,並原生提供了Promise
對象。做爲對象,Promise 有一下兩個特色: (1)對象的狀態不受外界影響。 (2)一旦狀態改變了就不會在變,也就是說任什麼時候候 Promise
都只有一種狀態。
Promise 有三種狀態,分別是:Pending (進行中), Resolved (已完成), Rejected (已失敗)。Promise 從 Pending
狀態開始,若是成功就轉到成功態,並執行resolve
回調函數;若是失敗就轉到失敗狀態並執行reject
回調函數。
若是 Promise 被解析(resolved),咱們能夠調用then()
方法並使用返回值執行操做。若是被拒絕(rejected),咱們可使用catch()
方法來處理錯誤。
處理異步編程的其餘方法還有async/await
和callbacks
。
原型一般指的是prototype
和__proto__
這兩個原型對象,其中前者叫作顯式原型對象,後者叫作隱式原型對象。
Javascript對象從原型繼承方法和屬性,而Object.prototype
在繼承鏈的頂部。Javascript prototype關鍵字還能夠用於向構造函數添加新值和方法。
來看看事例:
function Animal(name, kind, age) { this.name = name; this.kind = kind; this.age = age; } Animal.prototype.ownerName('Mark');
能夠看到,經過使用原型,咱們可以將ownerName
屬性添加到Animal()
構造函數中。
提高是一種機制,它將全部聲明的變量和函數提高到它們局部做用域的頂部,若是變量和函數被放置在全局做用域,則會被提高到全局做用域的頂部。
Javascript中,能夠在變量被使用後在聲明它。
提高用於避免在變量或函數有在沒有定義以前就執行致使的 undefined
錯誤。
name = 'Ted'; console.log(name); var name; // 'Ted' var name; name = 'Ted'; console.log(name); // 'Ted';
使用 var
聲明的變量,若是沒有賦值,則默認會被初始化爲 undefined
, let
和 const
則不會。另外,須要注意的是,在聲明const
時,必須同時初始化它,由於後面不可在更改它。
對象只是一種特殊的數據。對象擁有屬性和方法。JavaScript 中的全部事物都是對象,如:字符串、數值、數組、函數等。
對象的屬性:反映該對象某些特定的性質的,如:字符串的長度、圖像的長寬等;
對象的方法:可以在對象上執行的動做。例如,表單的「提交」(Submit),時間的「獲取」(getYear)等;
屬性只是簡單的值,而方法是能夠在對象上執行的操做。
var student = { firstName: 'Alice', lastName: 'Jones', age: 21, sayHi: () => { return 'Hi, I am ' + this.firstName; } }
在上面的代碼中,你能夠看到Student
對象,其中包含三個屬性和一個方法。
在javascript中函數是一段能夠被執行或調用任意次數的JavasScript代碼,在數據類型中屬於"function"
。函數也擁有屬性和方法,所以函數也是對象。
在Javascript中函數定義函數聲明或函數表達式由關鍵字function
開始。在定義函數時,能夠在函數名後面的括號中添加一些參數。當咱們調用函數時,括號中傳遞的值稱爲參數。
function calculate(x, y) { return x * y; } calculate(2, 5);
若是函數的調用參數相同,則永遠返回相同的結果。它不依賴於程序執行期間函數外部任何狀態或數據的變化,必須只依賴於其輸入參數。
顧名思義,純函數跟咱們初中數學的基本函數同樣,遵循必定的映射關係,輸入決定輸出,一個輸入只能對應一個輸出。不一樣的輸入能夠有相同的輸出,可是相同的輸入不能有不一樣的輸出
一個函數,若是符合如下兩個特色,那麼它就能夠稱之爲 純函數:
構造函數是一種特殊的方法,用於初始化和建立 Javascript 類中的對象。
JavaScript 中的構造函數和其它語言中的構造函數是不一樣的。 經過 new
關鍵字方式調用的函數都被認爲是構造函數。
在構造函數內部,this
指向新建立的對象 Object。 這個新建立的對象的 prototype
被指向到構造函數的 prototype
。
若是被調用的函數沒有顯式的 return
表達式,則隱式的會返回 this
對象,也就是新建立的對象。
const Person = (name, age) => { this.name = name; this.age = age; } var man = new Person('Mark', 23); console.log(man); // { name: 'Mark', age: 23 }
在上面的代碼中,我建立了一個Person
構造函數,在下面的代碼中,建立了一個名爲man
的新變量,並基於Person
構造函數建立了一個新對象。
自從 ES6 引入以來,咱們能夠在Javascript中使用類。 類是一種函數,咱們使用關鍵字class
代替function
關鍵字來初始化它。
除此以外,咱們還必須在類內部添加constructor()
方法,該方法在每次初始化類時都會調用。
在constructor()
方法內部,咱們添加了類的屬性。 要基於現有的類建立另外一個類,咱們可使用extends
關鍵字。
在JavaScript中使用類的一個很好的例子是 React 框架,它是類的組件。
在本文中,我收集了開發者常常問的 10 個Javascript問題,並給出答案,答案不是惟一,這裏只是本身的一些看法,但願本文能給初始化者帶來一些幫助。
人才們的 【三連】 就是小智不斷分享的最大動力,若是本篇博客有任何錯誤和建議,歡迎人才們留言,最後,謝謝你們的觀看。
原文:https://dev.to/duomly/10-most...
代碼部署後可能存在的BUG無法實時知道,過後爲了解決這些BUG,花了大量的時間進行log 調試,這邊順便給你們推薦一個好用的BUG監控工具 Fundebug。
文章每週持續更新,能夠微信搜索 【大遷世界 】 第一時間閱讀,回覆 【福利】 有多份前端視頻等着你,本文 GitHub https://github.com/qq449245884/xiaozhi 已經收錄,歡迎Star。