1. 程式人生 > >js部分基礎

js部分基礎

cli undefined 堆內存 defined 另一個 leg his 創建 name

1.js的基本類型有哪些?引用類型有哪些?null和undefined的區別。

  基礎類型:number,null,regex,string,boolean

  引用類型 : object,function,array  
  null是數據類型,undefined未定義

  

2.如何判斷一個變量是Array類型?

  array:Object.prototype.toString.call(obj)  [object Array]

  

3.引用類型和基本類型的區別

  引用類型:堆內存,是二級緩存,保存一個指針,指向另一個內存,如果程序不結束或者沒有手動釋放,則不釋放

  基本類型:棧內存,是一級緩存,由系統分配或者釋放。

  

4.事件委托(手寫例子)

<div id=‘parent‘></div>
<script>
    function delegate(dom,type,fn){
      document.body.click(function(e){
          if(e.target = dom){
              fn(e)
          }
      })
    }
<script>            

  

5.對閉包的理解,閉包的優缺點?

  閉包:一個可以讓外部訪問的函數。消耗內存

  

6.改變this的幾種方法?

  call , apply , bind

  

7.顯式和隱式原型

  顯式原型:prototype , Function是一個Object,Function有一個屬性prototype,它是一個指針,指向一個對象。這個對象有construsctor屬性

  隱式原型:_proto_ ,指向創建這個對象的函數的prototype,一個指針指向一個對象。

  

8.創建對象的多種方式

//字面量
var obj = {name:‘test‘}

//構造函數
var obj = new Object({name:‘‘})

  

9.實現繼承的多種方式和優缺點

//原型鏈
function Parent(){
   this.name=‘‘  
}
function Son(){}
Son.prototype = new Parent()

//創建新對象
var son = Object.create(new Parent())

//call,apply
function Son(){
   Parent.call(this,‘‘)
}

  

10.變量提升

    var  value = 1;
  var  test  =  function(){
    console.log(value)
    var value =  2;
  }
  test()
  function test(){
    console.log(value+1)
  }
  test();     
    // undefined , undefined
 

  

11.匿名函數

(function(){
    alert(‘test‘)
})()

  

12.NaN != NaN,false != null

13.new 一個對象的過程

function ClassName (option){
    console.log(option)  
}
ClassName.prototype.say=function(){}


let obj = new ClassName({})


1.創建一個對象,傳入原型 lo = Object.create(ClassName.prototype) 
2.執行當前函數,並且this執行 newObj = ClassName.call(o)
3. 返回新的對象 newObj

  

14.

  

js部分基礎