0%

了解 JavaScript 的内存泄露和解决方式!

在这篇文章中我们将要探索客户端 JavaScript 代码中常见的一些内存泄漏的情况,并且学习如何使用 Chrome 的开发工具来发现他们。我们继续这个旅程!

介绍

内存泄露是每个开发者最终都不得不面对的问题。即便使用自动内存管理的语言,你还是会碰到一些内存泄漏的情况。内存泄露往往是其他一票问题的元凶,比如:运行缓慢,崩溃,高延迟,甚至一些与其他应用相关的问题。

Read more »

JS 的动态调用特性是 JS 动态特性中重要的组成部分,提到这个特性就需要讲明白bindcallapply这三个函数

JS函数的调用机制

js 里函数调用有 4 种模式:方法调用、正常函数调用、构造器函数调用、apply/call 调用。无论哪种函数调用除了你声明时定义的形参外,还会自动添加 2 个形参,分别是 this 和 arguments。arguments 是一个 array-like 类型对象,提供了 length 和下标操作符访问元素的方法,但是却没有提供其他任何数组对象应有的方法。

this 到对象的绑定是一个超级延迟绑定,这个绑定发生在函数调用的时候,this 代表的也就是主调方对象。这实现了 JS 的强大动态特性。

Read more »

先说结论,在 JavaScript 中,作用域只有两种。全局作用域(window)局部作用域(函数)
全局作用域中的所有对象均为 window 对象的属性。局部作用域(函数)中的所有对象在整个函数范围内均是可见的,也就是说 JavaScript 没有类似其他语言中的块级作用域。

Read more »

什么是 deferred 对象

deferred 对象是 jQuery 为操作的回调函数提供的解决方案。deferred 对象提供了链式操作来对操作进行回调处理。

deferred 对象引入了“执行状态”这个概念,一个 deferred 对象的执行状态分为三种

  1. 未完成(unresolve)
  2. 已完成(resolved)
  3. 已失败(rejected)

通过 deferred 对象的 resolve,reject 方法来改变执行状态从而调用与该状态绑定的回调函数(们)。

Read more »

1. 代码块

JavaScript中的代码块是指由<script>标签分割的代码段。
例如:

1
2
3
4
5
6
<script type="text/javascript">
alert("这是代码块一");
</script>
<script type="text/javascript">
alert("这是代码块二");
</script>

JS是按照代码块来进行编译和执行的,代码块间相互独立,但变量和方法共享。什么意思呢? 举个例子,就明白了:

Read more »

ng-view 是一个优先级为1000的终极指令。AngularJS 不会运行同一个元素上的低优先级指令。这个指令是一个特殊的指令,用于为$route对应内容提供占位

  1. 每次触发$routeChangeSuccess事件,视图都会更新。
  2. 如果某个模板同当前的路由相关联:
    • 创建一个新的作用域
    • 移除上一个视图,同时上一个作用域也会被清除
    • 将新的作用域同当前模版关联在一起
    • 如果路由中有相关的定义,那么就把对应的控制器同当前作用域关联起来
    • 触发$viewContentLoaded事件
    • 如果提供了onload属性,调用该属性所指定的函数

使用 AngularJS 路由,需要在 angular.js 之后引入 angular-route.js

$ionicHistory 是 ionic 框架实现的一套记录页面导航路径的方式。它可以跟踪用户在 app 内的浏览记录。它可以跟踪用户的当前页面,父页面和子页面(如果有)。
与浏览器不同的是,它可以跟踪多个平行的用户页面历史,比如多个 tab 的单页面应用。

Read more »

指令的定义

指令可以理解为在特定的 DOM 元素上运行的函数,指令可以扩展元素的功能。使用这个机制我们可以模块化我们的代码。以实现更好的结构和代码复用。

Read more »

  1. <head></head> 之间之放置统计脚本,全局变量等等与页面逻辑无关的 js 代码。
  2. 引入页面逻辑相关 js 库的标签放在底部。
  3. 自定义的 js 代码放在引入 js 库的下面,也就是整个页面的最底部。