zoukankan      html  css  js  c++  java
  • 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.原型

    过于复杂,后续再议

  • 相关阅读:
    使用commonscompress操作zip文件(压缩和解压缩)
    BoneCP的使用
    Struts2多文件上传
    shell 脚本转换 十六进制 十进制 八进制 二进制
    磁盘 I/O 性能监控指标和调优方法
    需求分析的故事——如何练就需求分析的火眼金晴?
    Debian 修改IP地址或DNS
    mysql主从备份
    ThinkPad T400 安装Windows Server 2008详细过程
    debian下,怎么ll命令注册
  • 原文地址:https://www.cnblogs.com/justSmile2/p/9756368.html
Copyright © 2011-2022 走看看