Web前端工程師面試題1-1
1.和後端人員是如何配合工作的?
作為前端人員,主要是提出需求,說清楚前端要的介面效果。比如說完成一個註冊登入功能就需要後端來給我們提供註冊登入的介面,我們在地址上傳遞一個引數過去,在用介面時根據這個引數來判斷時登入還是註冊,根據後端傳過來的資料可以判斷是註冊成功還是註冊失敗
2.ES6相關問題
1)const arr=[1,2,3] arr[0]=5;可以成功修改arr[0]的值嗎?
可以,首先const是 1 ) .定義常量的關鍵字,一旦聲明瞭變數就必須初始化 2 ) .const與let一樣,只在塊級作用域內有效 3 ) .const宣告的變數不會提升,存在暫時性死區,只能在宣告之後使用,與let一樣不可以重複宣告 4 ).const實際上保證的並不是變數的值不能改動,而是變數所指向的那個記憶體地址不得改動
基於以上的第4點就可以得出這句話不會報錯,而且能夠成功更改陣列中第一項的值
2)關於堆和棧
JavaScript中變數分為基本型別和引用型別。基本型別就是儲存在棧記憶體中的簡單資料段,而引用型別指的是那些儲存在堆記憶體中的物件
基本型別:基本型別有Undefined Null Boolean Number String,這些型別在記憶體中分別佔有固定大小的空間,他們的值儲存在棧空間
引用型別:引用型別,值的大小不固定,棧記憶體中存放地址指向堆記憶體中的物件。也就是說,棧記憶體中存放的是該物件的訪問地址,在堆記憶體中為這個值分配空間。由於這種值得大小是不固定的,因此不能把他們儲存到棧中。但是記憶體地址大小是固定的,於是可以把記憶體地址儲存到棧中。當查詢引用型別的變數時,先從棧中讀取其記憶體地址,他通過的地址找到堆中的值。這種就叫做按引用訪問。
棧:存放基本型別,堆:存放引用型別。 基本型別在當前執行環境結束時銷燬,引用型別不會隨執行環境結束而銷燬,只有當所有引用它的變數不存在時這個物件才會被垃圾回收機制回收
比如 :var x = {name:"aaa"};
var obj1 = x;
var obj2 = x;
obj1.name = "bbb";//x,obj1,obj2的name值都會改變
obj1 = {name:"bbb"}//這裡obj1重新又開闢了一個空間,所以只有obj1的name值改變了
3)怎麼鎖定堆中的資料?
Object.freeze(a);鎖定之後,陣列的值將不可以修改。被凍結物件自身的所有屬性都不可能以任何方式被修改
4)ES6中有多少種定義變數的方法?
一共有6種:var function let const import class
5)js中的資料型別
js中包括String Number Boolean Undefined Null五種基本型別和Object複雜資料型別
6)es6中的解構賦值
例:
在解構賦值中,只有預設值嚴格的等於(===)undefined時,才會使用,也就是說b:undefined時 輸出b=3
7)有關箭頭函式的this指向
箭頭函式和普通函式的區別:箭頭函式是匿名函式,不能作為建構函式,不能使用new。 箭頭函式不繫結arguements,取而代之用rest引數...解決。 箭頭函式不繫結this,會捕獲其所在的上下文的this值,作為自己的this值,任何方法都不能改變其this指向。 箭頭函式沒有原型屬性。 箭頭函式只能在宣告之後呼叫,普通函式宣告之前就可以呼叫。
要說明一點是:只有函式被呼叫時才會有this指向,這個this指向是window
這裡的this指向document,執行時,箭頭函式找離他最近的函式,那個函式的this指向就是箭頭函式的this指向