js 幾個重要的特性


背景:

語法借鑒    java    

函數借鑒    scheme

原型繼承借鑒    self

正則表達式借鑒    Perl

 

1.動態語言

函數的定義和調用  形參與實參不需要一致

形參可由 arguments 類數組獲取 (形參傳入時與其形成映射關系)

變量之間無阻礙相互轉換,不需要指定類型,(前一刻可能是 num ,可以立馬變 str fn obj 。。)

2.解釋性語言、跨平台

js代碼運行前夕不需要編譯,但是有個預編譯過程(上下文環境、變量提升、形參實參統一化、函數聲明提升)

例子:

function a(){ if(true){ function aa(){console.log('true')} }else{ function aa(){console.log('false')} } aa();}

部分瀏覽器執行 a()  -  false  

函數與變量都存在提升

 

不需要先生成文件再轉機器碼運行,直接解釋成0101跑起來

3.單線程

代碼塊之間不相互影響( 如兩個 script  之間)

之上而下運行,看一行執行一行,出現錯誤立馬報錯

4.this指向

根據 fn 調用場景,分為函數和方法(包括構造函數調用、call和apply的調用),this分別指向window(undefined)、obj(上下文)

例子:

var obj={a:function(){ console.log(this) } }

obj.a()  -  obj

 

var obj={a:function(){ return function(){console.log(this)} } }

obj.a()()   -   window

 

var obj={a:function(){ var that=this; return function(){console.log(that)} } }

obj.a()()    -  obj

 

5. 所有函數的方法 call  apply  bind

都改變 this 指向 (上下文環境)

call  apply  借用函數

bind  返回函數體

 

可以實現效果:任何函數可以調用任何對象的方法

6.原型

過於復雜,后續再議


免責聲明!

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



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