javaScript杂项

关于script与noscript元素

  • 所有script元素都会按照它们在页面中出现的顺序依序被解析,在不使用defer和async属性的情况下,只有在解析完前面的script元素中的代码之后,才会开始解析后面的script元素中的代码
  • 由于浏览器会先解析完不使用defer属性的script元素中的代码,然后再解析后面的内容,所以一般应该把script元素放在页面的最后,即主要内容后面</body>标签前面
  • 使用defer属性可以让脚本在文档完全呈现之后再执行,延迟脚本总是按照它们指定的顺序进行
  • async属性可以表示当前脚本不必等待其他脚本,也不必阻塞文档呈现,但不能保证异步脚本按照它们在页面中出现的顺序执行
  • 使用noscript元素可以指定在不支持脚本的浏览器中显示替代的内容。但在启用了脚本的情况下,浏览器不会显示noscript元素中的任何内容

数据类型

五种基本类型:String、Number、Null、Undefined、Boolean

一种复杂类型:Object

typeof操作符的检测结果

  • undefined:未定义
  • boolean:布尔值
  • string:字符串
  • number:数字
  • object:对象或null
  • function:函数

instanceof检测

语法为:检测的变量 instanceof 类型(构造函数);返回值为true或false

所有引用类型的值都是object的实例,所以在检测一个引用类型值和object构造函数时,instanceof操作会返回true,如果是基本类型的值,始终返回false

关于javascript变量

  • 变量声明
    在函数中使用var声明,代表此变量在函数的作用域中创建,离开函数执行环境后被销毁,外部无法访问,如果不使用var声明,当函数执行完毕后,外部依然可以访问到此变量,但在严格模式下会宝座,所以仅可能避免此情况发生
  • 变量有两种类型的值:
    基本类型:简单的数据段,即五中基本类型,在内存中占据固定大小的控件,保存在栈内存中
    引用类型:指那些可能由多值组成的对象(保存在内存中的对象),应用类型的值是按引用访问的,保存在堆内存中
  • 赋值时
    当一个变量向另一个变量复制基本类型的值,就会在变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上,所以调用函数传递参数时,在里面改变了的值不会影响到外面的值,因为是两个不同的值
    当一个变量向另一个变量复制引用类型的值时,同样也会将存储在变量对象的值复制一份到新变量分配的空间中。不同的是,这个值的副本实际上是一个指针,而这个指针指向存储在堆中的一个对象。复制完成后,两个变量实际上引用同一个对象。所以,改变其中一个变量,就会影响另一个变量

声明时,可通过,来分隔多个变量,同时声明;对于let,const同样如此

关于javascript的内存管理

变量的执行环境有助于帮助何时释放内存

当一个全局变量是一个对象的时候,当不再使用它时,将它设为null(解除引用),以便系统释放内存,提高性能。实际上解除引用并不意味着自动回收该值所占的内存,解除引用的真正作用是让该值脱离执行环境,以便垃圾收集器下次运行时将其回收

关于javascript垃圾回收机制

  • 离开作用域的值将被自动标记为可以回收,因此在垃圾收集期间被删除
  • 标记清除是目前主流的垃圾收集算法,这种算法的思想是给当前不使用的值加上标记,然后再回收其内存
  • 另一种垃圾收集算法是引用计数,这种算法的思想是跟踪记录所有值被引用的次数。javascript目前都不再使用这种算法;但在IE中访问非原生javascript对象(如DOM元素)时,这种算法仍然会导致问题
  • 解除变量的引用不仅有助于消除循环引用对象,而且对垃圾收集也有好处。为了确保有效地回收内存,应该及时解除不再使用的全局对象、全局对象属性以及循环变量的引用

关于javascript作用域链

  • javascript总共有两种环境,一个是全局环境,一个是局部环境(函数执行环境)
  • 全局环境与局部环境形成一条作用域链,全局环境为链头,当前执行的环境为链尾
  • 在每次进入新执行环境,都会创建一个用于搜索变量和函数的作用域链
  • 使用with和try-catch可以延长作用域链
  • with通过接受对象,把此对象添加到作用域的前端,而try-catch会创建一个新的变量对象其中包含的是被抛出的错误对象的声明

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值