Js的作用域及This指向


一.作用域:瀏覽器給js的一個生存環境 (棧內存)。

二.作用域鏈:js中的關鍵字var和fuanction都可以提前聲明和定義,提前聲明和定義的放在我們的內存地址 (堆內存)中。

     然后js從上到下逐行執行,遇到變量就去內存地址查找是否存在這個變量,如果有就使用,沒有就繼續向父級作用域

     查找直到window下結束,這種查找機制叫做作用域鏈。  

 三.Js代碼中存在大量的變量和函數,我們在使用它們的時候一定要知道它們到底歸屬誰。

四.This

    1.this是js的一個關鍵字,指定一個對象然后去替代它。

      函數內的this和函數外的this,函數內的this指向行為發生的主體。函數外的this都指向window沒有意義。

 為什么還是window?

因為瀏覽器執行js代碼的時候在執行chifan()這個函數的時候查找到變量chifan的歸屬是window,在window下的

變量可以寫成window.chifan函數可以寫成window.chifan()

   2.函數內的this和函數在什么環境中定義沒有關系,而只和自己的主體有關。

   3.主體怎么找?

            就看函數 (方法)帶不帶“.”,如果函數和方法執行時帶“.”,那么this就指向“.”前面的對象,如果不帶“.”,就

           指向window  

   4.自執行函數里面的this都指向window。

     This和變量面試題,先找this的主體是誰,然后把它換成那個主體就行啦

   5.給元素中的某一事件綁定方法,當事件觸發時,執行綁定的方法,方法中的this指向當前元素。

     重點是函數套函數的時候,不管它怎么定義,關鍵是看它執行時候的主體。

     360經典面試

js的數據類型

      基本數據類型: String  Undefined Null Boolean  Number

      引用數據類型: Object  Array Function

     二者的區別:

    基本數據類型就是簡單的操作值,引用數據類型,把引用地址賦值給變量

堆內存

      就是存放代碼塊的,存放形式有兩種,一種是對象以鍵值對的形式存放   

     另一種就是函數 以字符串的形式存放。

案例:

引用數據類型的賦值,是把引用地址賦給它,在修改屬性的時候,通過地址查找然后改掉。

應用數據類型,如何操作?

      先通過引用地址去查找堆內存中的代碼,然后再去修改

 

This研究在函數內部

    在js中的函數形式的種類

        1.   普通函數   function  fn(){}    var fn = function ()

        2.  類

   對象 Object

       對象里面的數據以鍵值對的形式存在。跟json一樣。

       1.  單例模式

我們把變量zhang的li叫“命名空間”

作用域和堆內存的區別

      作用域是函數執行的時候產生 fn()

      函數執行的時候首先會開辟一個新的內存空間叫棧內存 (環境或作用域)

     數據類型在賦值的時候會開辟一個新的內存空間叫堆內存 (存放代碼塊的)

     二者都會形成一個內存地址

生成對象的單例模式

    優勢,每個對象都是獨立的,即便屬性起的名字一樣,不會相互干擾,方便現在流行的

   開發模式“模塊化開發”。如果需要使用里面的屬性,用運算符 如 zhang.name 或 zhang

["name"],判斷一個屬性是不是這個對象的用in運算符 如 “name”in zhang 如果遍歷這個

對象用for(attr in zhang){}

     缺點,不可以批量生產,只能一個一個去創建。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM