JavaScript的經常使用知識點 | 8月更文挑戰

這是我參與8月更文挑戰的第11天,活動詳情查看:8月更文挑戰markdown

1、原型鏈

原型鏈涉及原型對象和原型鏈是如何產生的閉包

一、原型對象函數

大部分的函數都有一個prototype屬性,這個屬性就算原型對象用來建立新對象的實例,新建立的對象也會又prototypr屬性,由於都有prototype屬性從而實現共享原型對象,因此這些對象均可以訪問原型對象的屬性。post

let obj = {
    name: 'yumiao',
    age: '18'
}
console.log(obj.hasOwnProperty('name'));//true
console.log(obj.hasOwnProperty('hasOwnProperty'));//false
console.log(Object.prototype.hasOwnProperty('hasOwnProperty'));//true

obj.hasOwnProperty();//這個方法就是在Object的原型對象中,能夠被任何對象看成本身的方法使用
複製代碼

上面的hasOwnProperty並不在Obj對象中可是能夠訪問,說明對象中是經過原型鏈拿到的方法學習

二、原型鏈spa

把對象打印出來的話,能夠看到每一個對象都有一個_proto_屬性,這個屬性就指向構造函數constructor的原型。每一個對象能夠經過這個屬性和上游的構造函數的原型對象鏈接起來,而上游對象也有_proto_屬性,這樣就好像產生了一個閉環,就是原型鏈。prototype

2、閉包

閉包是函數和聲明函數的詞法環境的組合,常規理解就算函數體內能夠訪問的變量的總和,不要是一個函數裏套着一個函數啦。code

(function() {
    let a = 1;
    function calculate() {
        let b = 2;
        let total = a+b;
        console.log(total);
    }
    calculate();//能夠訪問內部變量a,組合在一塊兒就是閉包});
複製代碼

閉包能夠隱藏變量,由於內部函數能夠訪問外部函數的變量,即便外部函數被return以後。orm

3、JavaScript的變量提高

js引擎的工做方式是先解析代碼,獲取全部被聲明的變量,而後一行一行的運行代碼。其中每行定義變量的語句會被先放到代碼頭部執行,就是變量提高。對象

console.log(1,a);//undefined
var a = 1;
function b() {
    console.log(2,a);//1
}
b();
複製代碼

其中第一行打印出來是undefined,是由於代碼是這樣執行的:

var a = undefined;
console.log(1,a);
a = 1;
function b() {
    console.log(2,1);
}
b();
複製代碼

把var a = 1提高到代碼第一行,而且默認賦值未undefined,而後a=1仍是在原來的位置,因此第一次打印出來a是undefined,後面就是一行一行執行。

enmmm,天天學習一點點,天天進步一點點,每天向上!

相關文章
相關標籤/搜索