1. 程式人生 > >前端面試必問題

前端面試必問題

**1.如何理解什麼是閉包?
2.前端的設計思想?
3.如何面向物件程式設計?
4.如何理解面向物件程式設計和麵向過程程式設計?**
5.什麼是鏈式作用域結構?
6.prototype和proto的區別

1.如何理解什麼是閉包?
我的理解就是一個函式內部巢狀一個函式,內部函式f2呼叫外部函式f1變數,從而返回值,來獲取f1函式的值,然而
函式f1被呼叫完啦,f2定義的變數還是存在記憶體中,沒有被垃圾回收體制回收(想一下f1函式巢狀f2函式這個例子)
阮一峰:
http://www.ruanyifeng.com/blog/2009/08/learning_javascript_closures.html


答:1.變數作用域
變數作用域:全域性變數和區域性變數
js的特別之處:函式內部可以直接讀取全域性變數,但是
在函式外部無法讀取函式內部的區域性變數。
注意點:在函式內部宣告變數的時候,一定要使用var命令。
如果不用的話,實際上宣告的是一個全域性變數
2.由於在javascript中,只有函式內部的子函式才能讀取區域性變數,
所以說,閉包可以簡單理解成“定義在一個函式內部的函式”。
在本質上,閉包是將函式內部和函式外部連線起來的橋樑
3.這些變數的值始終保持在記憶體中,不會在發生呼叫後被自動清除,不會被垃圾回收機制回收,
記憶體消耗很大,所以不能濫用閉包,否則會造成網頁的效能問題,在IE中可能導致記憶體洩漏。
解決方法是,在退出函式之前,將不使用的區域性變數全部刪除

2.前端的設計思想?
前端開發核心思想:
1.表現(css)、內容(html)、行為(js)的分離
2.標記應該是結構良好、語義正確以及普遍合法。
3.Javascript應該起到漸進式增強使用者體驗的作用。

3.如何面向物件程式設計?
4.如何理解面向物件程式設計和麵向過程程式設計?
5.什麼是鏈式作用域結構?
函式f2被包括在函式f1內部,f1內部的所有區域性變數,對f2都是可見的。但是f2
內部的區域性變數,對f1就是不可見的
對於外部讀取函式內部的區域性變數就是在巢狀一個子的函式,使它變為父親函式

prototype是函式才有的屬性
_proto_是每個物件都有的屬性
但_proto_不是一個規範屬性,只是部分瀏覽器實現了此屬性,對應的標準屬性是[prototype]
注:大多數情況下,_proto_可以理解為"構造器的原型",即:
_proto_ === constructor.prototype



var a = {};
console.log(a.prototype);  //undefined
console.log(a.__proto__);  //Object {}

var b = function(){}
console.log(b.prototype);  //b {}
console.log(b.__proto__);  //function() {}