JS 经典代码段总结 start from 2016-08-22
1、for(var i = 0, max = myArray.length; i < max ; i++){
//用myArrayy[i]来做点什么
}
用max存储myArray的长度,防止每次循环去读取数组长度,尤其是当设计到DOM节点集合时,可明显提高效率。(2016-08-22)
2、function foo(){
var a = b = 0;
}
b会声明为全局变量。原因是:从右到左的赋值过程,首先是 b = 0 ,此情况下b是未声明的,然后是 var a = b;实际顺序为 var a = ( b = 0);(2016-08-22)
3、switch模式(switch Pattern)
可以通过类似下面形式的switch语句增强可读性和健壮性:
var inspect_me = 0,
result = '';
switch(inspect_me){
case 0:
result = 'zero';
break;
case 1:
result = 'one';
beak;
default:
result = 'unknown';
}
4、适合使用空格的地方包括:
-> for循环分号分开后的部分:如for(var i = 0; i < 10; i++){...}
-> for循环中初始化的多变量(i和max): for(var i = 0, max = 10; i < max; i++){...}
-> 分隔数组项的逗号的后面: var a = [1, 2, 3];
-> 对象属性逗号的后面以及分隔属性名和属性值的冒号的后面: var o = {a: 1, b: 2};
-> 限定函数参数: myFunction(a, b, c)
-> 函数声明的花括号的前面: function myFunc() {...}
-> 匿名函数包大师function的后面:var myFunc = function () {};
5、JS 表达式和声明存在着十分微妙的差别。首先,函数声明会在任何表达式被解析 和求值之前 先被解析和求值,即使你的声明在代码的最后一行,它也会在同作用域内第一个表达式之前被解析/求值,参考如下例子,函数fn是在alter之后声明的,但是在alert执行的时候,fn已经有定义了:
alert(fn());
function fn(){
return 'Hello World ...';
}
6、var f = function foo(){
return typeof foo; // foo是在内部作用域内有效
}
//foo 在外部作用域是不可见的
typeof foo ; // "undefined"
f();// "function"
7、Module模式的基本特征:
-> 模块化,可重用;
-> 封装了变量和function,和全局的namespace不接触,松耦合
-> 只暴露可用public方法,其它是由方法全部隐藏
var Calculator = function(eq){
//这里可以声明是由成员
var eqCt1 = document.getElementById(eq);
return {
//暴露公开的成员
add: function(x, y){
var val = x + y;
eqCtl.innerHTML = val;
}
}
}
我们可以通过如下的方式来调用:
var calvulator = new Clculator('eq');
calculator.add(2,2);
8、引用全局变量
JavaScript有一个特性叫做隐式全局变量,不管一个变量有没有用过,JavaScript解释器反向遍历作用域链来查找整个变量的var声明,如果没有找到var,解释器则假定该变量是全局变量,如果该变量用于了赋值操作的话,之前如果不存在的话,解释器则会自动创建它,这就是说在匿名闭包里使用或创建全局变量非常容易,不过比较困难的是,代码比较难管理,尤其是阅读代码的人看着很多区分哪些变量是全局的,哪些是局部的。
不过,好在在匿名函数里我们可以提供一个比较简单的替代方案,我们可以将全局变量当成一个参数传入到匿名函数然后使用,相比隐式全局变量,它又清晰又快,我们来看一个例子:
(function($, YAHOO){
// 这里,我们的代码就可以使用全局的jQuery对象了,YAHOO也是一样
})(jQuery, HAHOO);
现在很多类库里都有这种使用方式,比如jQuery源码。
不过,有时候可能不仅仅要使用全局变量,而是也想声明全局变量,如何做呢?我们可以通过匿名函数的返回值来返回这个全局变量,这也就是一个基本的Module模式,来看一个完整的代码:
var blogMoudle = (function(){
var my = {}, privateName = '博客园 ';
function privateAddTopic(data){
//这里是内部处理代码
}
my.Name = privateName;
my.AddTopic = function(data){
privateAddTopic(data);
};
return my;
})();
上面的代码声明了一个全局变量blogModule,并且带有2个可访问的属性:blogModule.AddTopic和blogModule.Name,除此之外,其它代码都在匿名函数的闭包里保持着私有状态。同时根据上面传入全局变量的例子,我们也可以很方便地传入其它的全局变量。
JS 经典代码段总结 start from 2016-08-22的更多相关文章
- js经典代码技巧学习之一:使用三元运算符处理javascript兼容
window.Event = { add: function() { //使用条件表达式检测标准方法是否存在 return document.addEventListener ? function(a ...
- js实用代码段(持续更新)
1.得到一个数,在一个有序数组中应该排在的位置序号: function orderInArr(num,arr) { if(num > arr[0]){ return 1 + arguments. ...
- 在Sublime Text 3 中安装SublimeLinter,Node.js进行JS&CSS代码校验
转载自:http://www.wiibil.com/website/sublimelinter-jshint-csslint.html 在Sublime Text中安装SublimeLinter,No ...
- 我们为什么要看《超实用的Node.JS代码段》
不知道自己Node.JS水平如何?看这张图 如果一半以上的你都不会,必须看这本书,一线工程师用代码和功能页面来告诉你每一个技巧点. 都会一点,但不知道如何检验自己,看看本书提供的面试题: 1. ...
- 实用的JS代码段(表单篇)
整理了下比较实用的Javascript代码段,完整的代码参考 1 多个window.onload方法 由于onload方法时在页面加载完成后,自动调用的.因此被广泛的使用,但是弊端是只能实用onloa ...
- js让菜单栏一直悬浮在顶部,经典代码
js让菜单栏一直悬浮在顶部,经典代码 很简单,你只需要把下面代码放到js中:$(function(){ //获取要定位元素距离浏览器顶部的距离 var na ...
- 超实用 JS 代码段笔记(一)
序1:30段简单代码段(有删减) 1 . 区分 IE 和 非 IE 浏览器 if(!+[1,]){ console.log('ie浏览器'); }else{ console.log('非ie浏览器') ...
- 《超实用的Node.js代码段》连载三:Node.js深受欢迎的六大原因
<超实用的Node.js代码段>连载一:获取Buffer对象字节长度 <超实用的Node.js代码段>连载二:正确拼接Buffer Node.js是一种后起的优秀服务器编程语言 ...
- 《超实用的Node.js代码段》连载二:正确拼接Buffer
对于初学Node.js框架的开发人员来说,可能认为Buffer模块比较易学.重要性也不是那么突出.其实,Buffer模块在文件I/O和网络I/O中应用非常广泛,其处理二进制的性能比普通字符串性能要高出 ...
随机推荐
- Number Sequence (HDU 1711)
Number Sequence Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- Java的URL来下载网页源码
import java.io.BufferedInputStream; import java.io.BufferedReader; import java.io.IOException; impor ...
- Java NIO Channel和Buffer
Java NIO Channel和Buffer @author ixenos Channel和Buffer的关系 1.NIO速度的提高来自于所使用的结构更接近于OS执行I/O的方式:通道和缓冲器: 2 ...
- curl 命令使用总结
curl 查看网页源码 curl www.sina.com 保存页面 -o curl -o [文件名] www.sina.com 直接在curl命令后加上网址,就可以看到网页源码. 如果要把这个网页保 ...
- HDU 5033 Building(单调栈)
HDU 5033 Building(单调栈) 题目链接http://acm.hdu.edu.cn/showproblem.php?pid=5033 Description Once upon a ti ...
- Url有值怎么使用get传值
原来url有数据 test 我们可以$_GET可以获取出来 一般form表单头用get方式都可以满足大多需求 但有一种情况 url里已经有值的时候 用url就会覆盖原来的值 而数据就会丢失 : 数据又 ...
- OvS: ovs-ofctl adding parameters analysis
if using dpdk, then OvS' datapath folder is ignored. Only OvS' userspace code are in use. According ...
- 《学习的艺术》 (The Art of Learning)——划小圈 (Making Smaller Circles)
“……我对象棋.武术以及范围更广的整个学习过程这三者的核心及相互关系的研究在一定程度上是受到了罗伯特.波席格<摩托车维护艺术>一书的启发.我决不会忘记指导我今后数年学习方式的那一幕.波席格 ...
- matlab imshow()函数显示白色图像问题
在MATLAB中,我们常使用imshow()函数来显示图像,而此时的图像矩阵可能经过了某种运算.在MATLAB中,为了保证精度,经过了运算的图像矩阵I其数据类型会从uint8型变成double型.如果 ...
- 从头开始学Java【1】
1:常见的DOS命令 盘符的切换 d:回车 目录的进入 cd javase cd javase\day01\code 目录的回退 cd.. cd\ 清屏 cls 退出 exit 创建目录 md 删除目 ...