前端开发者的 Mac 配置手册(二)

写在开始

上篇文章介绍的是系统环境的配置,在这一篇中将会介绍代码编辑器 Sublime Text 3 的简单配置和实用插件。

Sublime Text 是一款跨平台代码编辑器(Not IDE),拥有非常丰富成熟的插件,辅以大量的快捷键,足使开发效率成倍提升。

另外,GitHub 在去年开源了一款叫 Atom 的代码编辑器,基本和 Sublime Text 无异。不过是基于 Node.js 和 Chromium,这个会在下一篇进行介绍。Atom 也是我目前的主力编辑器。

阅读全文 »

前端开发者的 Mac 配置手册(一)

前言

工欲善其事,必先利其器。

目前可供开发人员使用的工具越来越多,合理的使用工具有助于提升开发效率,但种类繁多时选择起来却会让人感觉眼花缭乱。所以我准备在接下来的几篇文章中分享一些我的 Mac 开发环境配置,供大家参考。

阅读全文 »

编写可维护的 Gruntfile.js

使用Grunt已经有很长一段时间了,不得不感叹其社区的壮大,各种插件层出不穷。而在这期间我也换过几种方式来组织Gruntfile.js,但都不是很理想,直到前段时间看到load-grunt-tasks这个插件以及More maintainable Gruntfiles这篇文章后,我就把项目中的Gruntfile.js都按照该文章作者所述的方式重新组织了一遍。

我就暂且把这种方式用自己的文字记录一下并分享给正在使用Grunt的同学们吧,不过本文也不算是对《More maintainable Gruntfiles》的翻译呐,毕竟我E文太差~

阅读全文 »

JavaScript闭包

闭包是JavaScript中的重要特性之一,大多数用过JavaScript的程序员也基本上都接触过闭包,不管是否知道或了解闭包这个概念。比如在用jQuery的时候:

1
2
3
4
var count = 0;
$('.btn').onclick = function(e) {
count += 1;
};

闭包,维基百科的解释是:指引用了自由变量的函数。而我个人认为前端大牛johnhax的解释更加容易理解:闭包就是内部函数能访问外部的变量。

所以,要理解闭包,只要理清楚变量作用域这个概念就差不多了。我也把对变量作用域的一些个人理解记录在了前两篇文章中,故这里就只简单说说一个函数它可以访问哪些作用域中的变量:

  1. 该函数自己内部声明的变量
  2. global作用域中的全局变量
  3. 如果该函数是内部函数,那它还可以访问其外部函数内声明的变量

而对于第三点,就是闭包的行为了,用一个简单的例子来说明。

阅读全文 »

JavaScript变量作用域(续)

上篇,已经大致明确了以下几点:

  1. JavaScript没有块级作用域,只有函数(局部)作用域和全局作用域
  2. 函数中未使用var关键字声明的变量会成为全局变量
  3. 同名时局部变量访问优先级高于全局变量
  4. JavaScript具有变量声明提前的特性

接下来根据上篇留下的最后一段代码,继续谈谈变量作用域。

1
2
3
4
5
6
7
8
9
10
11
12
var name = 'global';

function foo() {
var name = 'foo';
bar();
}

function bar() {
console.log(name);
}

foo();

这段代码最终会在控制台打印出'global',而并非'foo'。可以看出,函数运行时能访问到的作用域是它被定义时的作用域,不是被调用时的作用域。

每当谈及JavaScript作用域的时候,基本上都会提到“词法作用域”、“执行环境”、“活动对象”、“作用域链”这几个概念,而了解这些概念将有助于理解JavaScript中的闭包。我也谈谈我对此的理解,如误欢迎指正,不胜感激。

阅读全文 »