您好,登錄后才能下訂單哦!
這篇文章主要介紹常見的JavaScript面試題有哪些,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
1.可以使網頁具有交互性,例如響應用戶點擊,給用戶提供更好的體驗。 2.可以處理表單,檢驗用戶的輸入,并提供及時反饋節省用戶時間。 3.可以根據用戶的操作,動態的創建頁面。 4使用JavaScript可以通過設置cookie存儲在瀏覽器上的一些臨時信息。
閉包是封閉在一起的函數的組合,其中內部函數可以訪問其變量和外部函數的變量。
最簡單的解釋方法就是上例子:
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 進行修改。
使用 JS 可以操縱 DOM 元素,例如顏色,位置,大小。 為了選擇頁面的特定元素,Javascript 提供了一些方法:
getElementById() - 通過id
屬性選擇一個元素
getElementsByName() - 通過name
屬性選擇一個元素
getElementsByTagName() - 選擇所選標簽的所有元素,
getElementsbyClassName() - 選擇特定類名的所有元素
* 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 框架,它是類的組件。
以上是“常見的JavaScript面試題有哪些”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。