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